【问题标题】:I send TCP request to HTTP server - but don't have any response我向 HTTP 服务器发送 TCP 请求 - 但没有任何响应
【发布时间】:2017-04-16 05:19:43
【问题描述】:

使用 boost-asio 我准备了简单的代码:

asio::io_service io_service;

asio::ip::tcp::socket s(io_service);
asio::ip::tcp::resolver resolver(io_service);
asio::connect(s, resolver.resolve({ "aire.pl", "80" }));

cout << "connected" << endl;

string request = "GET http://aire.pl/ HTTP/1.1";
size_t request_length = std::strlen(request.c_str());
asio::write(s, asio::buffer(request, request_length));

cout << "packet sent" << endl;

char reply[1024];
size_t reply_length = asio::read(s, asio::buffer(reply, request_length));
std::cout << "Reply is: ";
std::cout.write(reply, reply_length);
std::cout << "\n";

似乎一切正常,因为使用 tcp-dump 我可以看到程序发送的数据包:

但我没有任何回应。一个有趣的事实是,如果 HTTP 服务器是 nginx,它可以正常工作!在本例中,HTTP 服务器是 Apache2。怎么了?

【问题讨论】:

  • 您是否使用过 Wireshark 或类似软件来检查您是否收到回复?
  • 最好发送 HTTP 请求,而不是 TCP 请求。你没有,完全没有。最后你需要\r\n\r\n

标签: c++ c++11 boost-asio


【解决方案1】:

您似乎尚未发送完整的 HTTP 请求。 GET 行后面是可选的标题,然后是一个空行来指示标题的结尾。即使您不想发送任何标头,您也需要发送空行,以便服务器知道它已收到整个请求。

\r\n\r\n 添加到request 字符串的末尾。

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多