2011-02-11 99 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请求。

相关问题