2016-01-15 49 views
1

當我在C中使用下面的GET HTTP請求時,我不斷收到400 Bad Request,但它在我使用字符串字符IP地址(例如:www.wwe.com/index。 PHP):在GET替換像這樣如何使用IP地址形成GET HTTP請求

GET %s HTTP/1.0\r\nHost: %s\r\nConnection: Keep-Alive\r\n\r\n 

的%S後:http://54.236.192.188/index.php和主機值由hostent結構的h_name複製字符串值提供。

所以請求如下:

GET http://54.236.192.188/index.php HTTP/1.0 
Host: ec2-54-236-192-188.compute-1.amazonaws.com 
Connection: Keep-Alive 

什麼我錯在這裏做什麼?

+0

我不明白,你可以請你張貼後請求看起來如何看起來? –

+0

@iharob在我傳入IP後,我更新了GET請求的外觀。 – Vimzy

回答

4

GET的參數應該只是資源路徑本身,並且Host標頭應該是請求發送到的機器的域/主機,如原始URL所指定的。

要請求http://www.wwe.com/index.php,該GET要求是這樣的:

GET /index.php HTTP/1.1 
Host: www.wwe.com 
... 

要請求http://54.236.192.188/index.php,則GET要求是這樣的:

GET /index.php HTTP/1.1 
Host: 54.236.192.188 
... 

但是,如果服務器運行同一IP地址上的多個網站,您不能在rquest中提供IP地址。標頭Host告訴服務器訪問哪個特定網站。

除非需要,否則應使用HTTP/1.1而不是HTTP/1.0。例如,Keep-Alive默認不支持HTTP/1.0。 HTTP 1.1需要頭文件Host

+0

將請求發送到HTTP代理時,在請求行中指定絕對URL是有效的。 –

+0

@RemyLebeau那麼指定該IP地址也是有效的?像我的問題描述? – Vimzy

+0

主機值從哪裏來的?我應該從hostent struct的h_name中獲得這個嗎? – Vimzy