2010-11-04 39 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"