2013-03-12 181 views
-1

我正在使用一个用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个& STREET = 990%20MASS%20AVENUE & STREET2 =单位%20A37 & CITY =阿灵顿& STATE = MA & ZIP = 00000 HTTP/1.1 \ r \ n \ r \ n“

+0

什么是最后的'%20HTTP/1.1 \ r \ n \ r \ n'? 'GET'call? – 2013-03-12 14:53:39

回答

3

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

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

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

+0

当你说'主机请求'字段时,它应该放在字符串中'/?CA = 1'之前吗? – octopusgrabbus 2013-03-12 15:16:22

+1

该URI确实无效。在某些情况下,使用绝对URI是可以接受的(例如,“GET http://stackoverflow.com/ http/1.1 ... ...”是HTTP代理请求的样子)。在大多数情况下,使用绝对路径(例如''GET/HTTP/1.1 \ r \ n主机:google.com \ r \ n \ r \ n“'请求谷歌主页)。在某些情况下,当请求不适用于资源时,可以使用'*'。还有一个例外:CONNECT方法,这里不适用。 – Sebivor 2013-03-12 15:24:03

+1

@octopusgrabbus请参阅我的谷歌示例,了解该问题的答案。顺便说一下,你阅读哪个规范?你可能已经足够松懈,希望SO能够为你做你的研究,但那会很不理想。 – Sebivor 2013-03-12 15:24:38