2010-11-04 5 views
20

Вот выдержка из прямых 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

В URL могут быть включены переменные GET. Вы просто включаете переменные GET в строку запроса. Например, если вы хотите отправить запрос GET с именем «username = fred» на www.example.com/index.php, вы отправите простой запрос GET на «http://www.example.com/index.php ? = имя пользователя Фрэд». Поэтому, чтобы ответить на ваш вопрос, просто используйте метод POST, но URL-адрес содержит данные GET.

+2

Что делать, если ваш параметр имеет такие пробелы, как username = 'fred johnson'? – latvian

+5

@latvian Вам нужно освободить место, чтобы сделать URL полностью безопасным. В вашем случае это будет http://www.example.com/index.php?username=fred%20johnson. Читайте о кодировке url здесь: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm – Samuel

9

Чтобы уточнить, GET и POST являются методами HTTP-запросов, а не типами значений.

  • Переменные GET называются параметрами query string. Они являются частью URL-адреса и могут быть включены в любой запрос.
  • POST-переменные - это содержимое тела сообщения с urlencoded. Они также могут быть отправлены с запросом PUT.

Поэтому, если вы хотите отправить оба типа значений, отправьте данные POST как обычно при явной записи строки запроса.

curl -d "key=val" "http://example.com?query_var=1" 
Смежные вопросы