2013-03-12 176 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