从 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的平台令牌应该是w​​indwos nt 6.0?

以上是关于从 web 服务器获取数据并将它们发送到客户端 c++的主要内容,如果未能解决你的问题,请参考以下文章

ajax功能完成后socket.io连接

如何在同一GET请求中呈现文件并将数据发送到页面

C# - Websocket - 将消息发送回客户端

网络协议解释

如何将数据从 Web 服务中的一种方法发送到另一种方法

如何使用 node.js MySQL 从 MySql DB 获取结果并将它们发送回 API.ai - DialogFlow