Jaka jest składnia wiersza polecenia cURL, aby wykonać żądanie POST?

2186

Jak mogę złożyć żądanie POST za pomocą narzędzia wiersza polecenia cURL ?

mic84
źródło
curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
svikramjeet

Odpowiedzi:

2542

Z polami:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

Z polami określonymi indywidualnie:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart:

curl --form "[email protected]" https://example.com/resource.cgi

Wieloczęściowy z polami i nazwą pliku:

curl --form "[email protected];filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Bez danych:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Aby uzyskać więcej informacji, zobacz instrukcję cURL . Poradnik cURL na emulację przeglądarki internetowej jest bardzo pomocna.

W libcurl użyj curl_formadd()funkcji do zbudowania formularza przed przesłaniem go w zwykły sposób. Aby uzyskać więcej informacji, zobacz dokumentację libcurl .

W przypadku dużych plików rozważ dodanie parametrów pokazujących postęp przesyłania:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

Jest -o outputto wymagane, w przeciwnym razie nie pojawi się pasek postępu.

Stephen Deken
źródło
7
@LauriRanta --data-urlencode(bez kreski), przynajmniej w najnowszych wersjach
waitinforatrain
4
Działa również, jeśli musisz zaktualizować zasób za pomocą PUT: curl -X PUT ...
Subfuzion
3
Mam problem ze zrozumieniem ... kiedy miałbym to zrobić With Fields, kiedy Multiparti kiedy Without Data?
CodyBugstein
7
Zamiast --dataciebie możesz użyć -d.
user35538,
mam szereg pól. jak mogę to zrobić?
ARUNBALAN NV,
507

W przypadku RESTful HTTP POST zawierającego XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

lub w przypadku JSON użyj tego:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Spowoduje to odczytanie zawartości pliku o nazwie filename.txti wysłanie go jako żądanie postu.

soundmonster
źródło
13
Wyjaśnienie @ tom-wijsman: curl -X POSTimplikuje żądanie HTTP POST, -dparametr (wersja długa :) --datainformuje curl, że następujące będą parametry POST i @filenamewyznacza zawartość pliku filenamejako parametr. Takie podejście najlepiej działa z interfejsami API RESTful HTTP znajdującymi się na Twitterze, Facebooku, różnych innych usługach internetowych, w tym Ruby on Rails, a także interfejsami API HTTP baz danych, takich jak CouchDB. REST oznacza reprezentatywny transfer stanu
soundmonster
1
Jak możemy zobaczyć odpowiedź xml nie w jednym wierszu, ale sformatowanym?
Witalij Zdanevich,
6
Myślę, że możesz zrezygnować, -X POSTskoro to sugeruje -d.
benjifisher
Jak podać wiele nagłówków?
keya
Wiele nagłówków: curl -H „header2: 1„ -H ”header2: 2” ...
Tomáš Kratochvíla,
131

Dane ze standardowego z -d @-

Przykład:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Wynik:

<p>Hello <strong>world</strong>!</p>
Ciro Santilli
źródło
6
Świetnie, jeśli masz już obiekt JSON w schowku
Luca Steeb
jeszcze lepiej: powtórz „$ message” | curl -H "Content-Type: application / json" -d @ - "$ url"
rzr
66
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

to przykład znaleziony w podręczniku Curl Example Manual .

Użyj% 26 dla ampersand, jeśli powyższe nie działa:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
Patrick Desjardins
źródło
61

Jeśli chcesz zalogować się do witryny, wykonaj następujące czynności:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

Pierwsze żądanie zapisuje plik cookie sesji (dostarczany po pomyślnym zalogowaniu) w pliku „headers”. Od teraz możesz używać tego pliku cookie do uwierzytelniania Cię w dowolnej części witryny, do której zazwyczaj uzyskujesz dostęp po zalogowaniu się w przeglądarce.

Martin Konecny
źródło
6
notatka ze strony podręcznika curl: „Opcja -c, --cookie-jar jest jednak lepszym sposobem przechowywania plików cookie”.
maxschlepzig
32
curl -v --data-ascii var=value http://example.com

i jest o wiele więcej opcji, sprawdź curl --helpwięcej informacji.

Vinko Vrsalovic
źródło
27

Jeśli jesteś leniwy, możesz google-chrome wykonać całą pracę za Ciebie.

  1. Kliknij prawym przyciskiem myszy formularz, który chcesz przesłać, i wybierz polecenie Sprawdź . Spowoduje to otwarcie panelu DevTools.
  2. Wybierz kartę Sieć w devtools i zaznacz pole wyboru Zachowaj dziennik .
  3. Prześlij formularz i zlokalizuj wpis za pomocą metody POST (kliknij prawym przyciskiem myszy dowolny nagłówek kolumny i upewnij się, że metoda jest zaznaczona).
  4. Kliknij prawym przyciskiem linię POST i wybierz Kopiuj > Kopiuj jako cURL .

chrome devtools: skopiuj jako cURL

Chrome skopiuje wszystkie dane żądania w składni cURL.

Chrome używa funkcji, --data 'param1=hello&param2=world'które możesz uczynić bardziej czytelnymi, używając jednego -dlub -Fjednego parametru w zależności od typu żądania POST, które chcesz wysłać, którym może być jeden application/x-www-form-urlencodedlub multipart/form-dataodpowiednio.

Zostanie on opublikowany jako POST application/x-www-form-urlencoded( używany w przypadku większości formularzy, które nie zawierają przesłanych plików ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

W przypadku zastosowania multipart/form-dataPOST -F( zwykle używanego z formularzami zawierającymi przesyłanie plików lub tam, gdzie ważna jest kolejność pól lub gdy wymagane jest wiele pól o tej samej nazwie ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

User-AgentNagłówek nie jest zazwyczaj potrzebne, ale mam wrzucony go na wszelki wypadek. Możesz uniknąć konieczności konfigurowania klienta użytkownika na każde żądanie, tworząc ~/.curlrcplik zawierający npUser-Agent: "Mozilla/2.2"

ccpizza
źródło