2011-02-11 96 views
0

我試圖從Web服務器獲取一些數據作爲代理,然後將數據發送到客戶端。
Web服務器 - >我 - >客戶端從Web服務器獲取數據並將它們發送到客戶端C++

這是我的主要代碼:

int main() 
{ 
    Initialize(); 
    ServerSocket s; 
    s.Bind(); 
    s.Listen(); 
    while(true) 
    { 
     TCPSocket* sock = s.Accept(); 

     ClientSocket client; 
     string addr = handle.getAddress(); 
     short prt = handle.getPort(); 

     client.Connect(addr, prt); 
     char data[5000]; 
     client.Send("GET /index.html HTTP/1.0\r\n\r\n", 28) ; 
     while(true) 
     { 
      int numbytes=client.Recv(data, 5000); 
      if(numbytes == 0) 
      { 
       break; 
      } 
      cout <<"Received from web server: " << numbytes << endl; 
      int numbytes2 = sock->Send(data, numbytes); 
      cout << "Sent to client: " << numbytes2 << endl; 
     } 
     client.Close(); 
    } 
    s.Close(); 
    return 0; 
} 

但是,當我在網上瀏覽,可以說google.com,我得到「302移動的文件已移至此處。 「在每個網站中我都會得到不同的行爲,但網站不會加載。當我發送和接收字節時,我做錯了什麼?先謝謝了。

+0

你在哪裏定義'手柄'? – Neo 2011-02-11 19:02:19

+0

處理它的一個類來處理客戶端和代理之間的身份驗證,這是行之有效的。這就是爲什麼我沒有在這裏包含代碼 – Kobe 2011-02-11 19:05:40

回答

1

你的代碼工作得很好。它只是現代的web服務器不會讓你連接沒有正確的身份驗證,使用用戶agen,頭等。在你的shell上嘗試下面的命令。

telnet yourserver.com 80 
<some messages from server> 

GET /index.html HTTP/1.0 

如果響應是一樣的,你開始使用C++程序的,那麼基本上所有你需要做的就是發送更多信息以正確驗證自己。

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
    headers = {'User-Agent': user_agent} 

併發送此數據以及您的GET請求。

相關問題