-1

ActiveStatePerlで記述されたサーバーを使用しています。どうやら、GETリクエストの形式が適切でない場合、応答結果は返されますが、httpヘッダーは返されません。私の場合はそうです。

IO::SocketPerlサーバーは、とをそれぞれ使用して要求をリッスンし、応答を送信しSendHTTPRequestます。

だから私の質問は次のとおりです。次のGETリクエストは無効ですか?

"GET?CA = 1&STREET = 990%20MASS%20AVENUE&STREET2 = UNIT%20A37&CITY = ARLINGTON&STATE = MA&ZIP = 00000%20HTTP / 1.1 \ r \ n \ r \ n"

リクエストが無効な場合、どのように無効になりますか?フォーマットを修正したいのですが。

どうやら、ActiveStatePerlはリクエストが無効であると考えています。

ソケットが正しく設定されると、次のコードが要求を送信し、応答を待ちます。ホスト名を含むソケットの設定を確認する必要がある場合は、この投稿を編集して下部に追加しますが、ソケットが正しく設定されていると想定します。

size_t bytes_read = 0; /* Keeps per-loop read-count. */
char local_buf[INET_BUF_LEN] = {'\0'};
total_socket_read_bytesM = 0; /* Initialize module-scope read length */
write (socket_fdP, request_bufP, strlen(request_bufP));

while(TRUE)
{
  if(total_socket_read_bytesM  <= (read_bufP_len - 1))
  {
    bytes_read = read(socket_fdP, (local_buf + bytes_read), sizeof(local_buf));

    if (bytes_read == 0)
    {
      break;
    }
    else
    {
     total_socket_read_bytesM += bytes_read;
    }
  }
  else
  {
    break;
  }
}

私はパントすることができました、そして私が結果を取り戻しているので心配する必要はありません。GETただし、有効なhttpリクエストを作成するためのCプログラムを作成したいと思います。

エピローグ:

これは私の作業要求がどのように見えるかです:

"GET /?CA = 1&STREET = 990%20MASS%20AVENUE&STREET2 = UNIT%20A37&CITY = ARLINGTON&STATE = MA&ZIP = 00000 HTTP / 1.1 \ r \ n \ r \ n"

4

1 に答える 1

3

HTTP/1.1 では「ホスト」リクエスト フィールドが必須であるため、リクエストは実際には無効です。

%20HTTP/1.1も間違っています。リソース名の後と HTTP バージョンの前に、エスケープされたスペースではなく、実際のスペース文字が必要です。

リソース識別子を?リクエストで開始できるかどうかはわかりません (確認するのが面倒です)。そうでない場合は、そうする必要があります/?CA=1...

于 2013-03-12T14:54:10.413 に答える