我试图从网络服务器获取一些数据作为代理,然后将数据发送到客户端 网络服务器 - >我 - >客户
这是我的主要代码:
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 Moved文件已移到这里。”在每个站点中,我都会遇到不同的行为,但该站点不会加载。我发送和接收字节时是否做错了什么?谢谢你提前。
答案 0 :(得分:1)
您的代码运行正常。只是现代的网络服务器不允许你使用user-agen,header等在没有正确验证自己的情况下进行连接。在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请求一起发送。