从 web 服务器获取数据并将它们发送到客户端 c++
Posted
技术标签:
【中文标题】从 web 服务器获取数据并将它们发送到客户端 c++【英文标题】:Get data from the web server and sent them to the client c++ 【发布时间】:2011-02-11 18:04:35 【问题描述】:我正在尝试从网络服务器获取一些数据作为代理,然后将数据发送到客户端。 网络服务器 -> 我 -> 客户端
这是我的主要代码:
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 The document has move here”。在每个站点中,我都会得到不同的行为,但该站点不会加载。发送和接收字节时我做错了吗?提前致谢。
【问题讨论】:
你在哪里定义了'handle'? 处理它的一个类来处理客户端和代理之间的身份验证,效果很好。这就是为什么我没有在这里包含代码 【参考方案1】:您的代码运行良好。只是现代的网络服务器不允许您在没有正确验证自己、使用用户代理、标头等的情况下进行连接。在您的 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 请求一起发送。
【讨论】:
如果我使用opera,我需要什么版本令牌(MSIE 5.5)和windows 7的平台令牌应该是windwos nt 6.0?以上是关于从 web 服务器获取数据并将它们发送到客户端 c++的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 node.js MySQL 从 MySql DB 获取结果并将它们发送回 API.ai - DialogFlow