为什么要求形成不良?

时间:2013-03-12 14:49:40

标签: c perl http activestate

我正在使用Active State Perl编写的服务器。显然,如果GET请求格式不正确,响应结果将返回,但没有其http标头。在我的情况下也是如此。

Perl服务器分别使用IO::SocketSendHTTPRequest侦听请求并发送响应。

所以我的问题如下。以下GET请求无效吗?

  

“GET   ?CA = 1&安培; STREET = 990%20MASS%20AVENUE&安培; STREET2 = UNIT%20A37&安培; CITY =阿灵顿&安培; STATE = MA&安培; ZIP = 00000%20HTTP / 1.1 \ r \ n \ r \ n“个

如果请求无效,它是如何无效的?我想更正格式。

显然,ActiveState Perl认为该请求无效。

正确设置套接字后,以下代码发送请求并等待响应。如果您需要查看包含主机名的套接字设置,我将编辑此帖并在底部添加,但假设套接字设置正确。

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;
  }
}

我可以踢,但不要担心,因为我得到的结果。但是,我想编写我的C程序来创建有效的http GET请求。

结语:

这就是我的工作要求:

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

1 个答案:

答案 0 :(得分:3)

HTTP / 1.1中需要“主机”请求字段,因此您的请求确实无效。

%20HTTP/1.1也是错误的。在资源名称之后和HTTP版本之前必须有一个实际的空格字符,而不是转义空格。

我不确定(并且懒得检查)资源标识符是否可以在请求中以?开头。如果没有,那么它应该是/?CA=1...