从Web服务器获取数据并将它们发送到客户端C++
问题描述:
我试图从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移动的文件已移至此处。 “在每个网站中我都会得到不同的行为,但网站不会加载。当我发送和接收字节时,我做错了什么?先谢谢了。
答
你的代码工作得很好。它只是现代的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请求。
你在哪里定义'手柄'? – Neo 2011-02-11 19:02:19
处理它的一个类来处理客户端和代理之间的身份验证,这是行之有效的。这就是为什么我没有在这里包含代码 – Kobe 2011-02-11 19:05:40