2010-11-04 62 views
20

以下是Live HTTP標頭的摘錄,我已將幾個值替換爲匿名。如何使用GET和POST參數提出請求?

POST blah/admin.php?module_id=1&action=update&id=129&pageNum=17&&eid=362 HTTP/1.1 

Host: blah 

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Firefox/3.6.12 

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

Accept-Language: en-us,en;q=0.5 

Accept-Encoding: gzip,deflate 

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 

Keep-Alive: 115 

Connection: keep-alive 

Referer: blah 

Cookie: blah 

Content-Type: multipart/form-data; boundary=---------------------------21278813472729408841849703914 

Content-Length: 5110 

-----------------------------21278813472729408841849703914 

Content-Disposition: form-data; name="MAX_FILE_SIZE" 



300000000 

該請求具有GET和POST值。另一端的腳本是PHP,並且希望某些值位於GET中,而另一些位於POST中。

我知道如何發出GET

curl -G -d "key=val" "http://yadayadayada" 

而且我知道如何做一個POST

curl -d "key=val" "http://yadayadayada" 
curl -F "key=val" "http://yadayadayada" 

但我怎麼在一個請求將兩者攪和?我迄今所做的每一次嘗試都以錯誤結束。

回答

30

GET變量可以包含在URL中。您只需在查詢字符串中包含GET變量。例如,如果您想發送帶有「username = fred」的GET請求至www.example.com/index.php,您可以將簡單的GET請求發送至「http://www.example.com/index.php ?用戶名=弗雷德」。因此,要回答您的問題,只需使用POST方法,但讓URL包含您的GET數據。

+2

如果你的參數有類似username ='fred johnson'的空格怎麼辦? – latvian 2013-03-29 14:32:49

+5

@latvian您需要轉義空間才能使網址完全安全。在你的情況下,它將是http://www.example.com/index.php?username=fred%20johnson。閱讀關於網址編碼的信息:http://www.blooberry.com/indexdot/html/topics/urlencoding.htm – Samuel 2013-03-29 14:46:16

9

爲了澄清,GET和POST是HTTP請求方法,而不是值類型。

  • GET變量被稱爲query string參數。它們是URL的一部分,可以包含在任何請求中。
  • POST變量是urlencoded郵件正文的內容。這些也可能與PUT請求一起發送。

因此,如果要發送兩種類型的值,請在正常情況下發送POST數據,同時明確寫入查詢字符串。

curl -d "key=val" "http://example.com?query_var=1"