2010-11-04 14 views
20

Oto fragment z nagłówków HTTP na żywo, zastąpiłem kilka wartości dla anonimowości.Jak mogę wysłać żądanie z parametrami GET i 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 

Żądanie ma wartości GET i POST. Skrypt na drugim końcu tego jest PHP i oczekuje, że pewne wartości będą w GET, a inne będą w POST.

wiem, jak wydać GET

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

I rozumiem, jak to zrobić POST

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

Ale jak mogę zmieszać dwa w jednym wniosku? Każda dotychczasowa próba zakończyła się błędem.

Odpowiedz

30

Zmienne GET mogą być zawarte w adresie URL. Wystarczy uwzględnić zmienne GET w ciągu zapytania. Na przykład, jeśli chcesz wysłać żądanie GET z "username = fred" do www.example.com/index.php, możesz wysłać proste żądanie GET do "http://www.example.com/index.php" ? username = fred ". Aby odpowiedzieć na twoje pytanie, po prostu użyj metody POST, ale URL zawiera dane GET.

+2

co jeśli twój param ma spacje takie jak nazwa użytkownika = 'fred johnson'? – latvian

+5

@latvian Musisz uciec z przestrzeni, aby adres URL był całkowicie bezpieczny. W twoim przypadku byłby to http://www.example.com/index.php?username=fred%20johnson. Przeczytaj o kodowaniu adresów URL tutaj: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm – Samuel

9

Aby wyjaśnić, GET i POST są metodami żądania HTTP, a nie typami wartości.

  • Parametry GET nazywane są parametrami query string. Są one częścią adresu URL i mogą być uwzględniane w każdym żądaniu.
  • Zmienne POST są zawartością treści wiadomości urlenowych. Mogą one być również wysyłane z żądaniem PUT.

Dlatego, jeśli chcesz wysłać oba typy wartości, wyślij dane POST w normalny sposób, jednocześnie jawnie wpisując ciąg zapytania.

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