2017-04-15 6 views
0

を持っていない:私は、HTTPサーバへのTCP要求を送信する - 私は単純なコードを用意しますが、ブースト-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ダンプを使用しているので、私は私のパケットを見ることができ、正常に動作するようですプログラムが送信されたこと:

enter image description here

しかし、私は何の応答もありません。 1つの興味深い事実は、HTTPサーバーがnginxならOKです!この例では、HTTPサーバーはApache2です。どうしましたか?

+1

Wiresharkなどのソフトウェアを使用して、回答が得られているかどうかを確認しましたか? – CurlyCorvus

+2

TCPリクエストではなくHTTPリクエストを送信する方がよいでしょう。あなたはしていません。最後に '\ r \ n \ r \ n'が必要です。 – EJP

答えて

2

完全なHTTPリクエストを送信していないようです。 GET行の後にはオプションのヘッダーが続き、その後にヘッダーの終わりを示す空白行が続きます。ヘッダーを送信したくない場合でも、サーバーが要求全体を受信したことをサーバーが認識できるように、空白行を送信する必要があります。

request文字列の最後に\r\n\r\nを追加します。

関連する問題