Wat is de cURL-opdrachtregelsyntaxis om een POST-aanvraag te doen?
Hoe kan ik een POST-aanvraag doen met het cURL-opdrachtregelgereedschap?
Met velden:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
Met individueel gespecificeerde velden:
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
Multipart:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
Multipart met velden en een bestandsnaam:
curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi
Zonder gegevens:
curl --data '' https://example.com/resource.cgi
curl -X POST https://example.com/resource.cgi
curl --request POST https://example.com/resource.cgi
Voor meer informatie zie de cURL-handleiding . De cURL tutorial over het nabootsen van een webbrowser is nuttig.
Met libcurl gebruikt u de curl_formadd()
-functie om uw formulier op te bouwen voordat u het op de gebruikelijke manier verstuurt. Zie de libcurl documentatie voor meer informatie.
Voor grote bestanden kunt u overwegen parameters toe te voegen om de voortgang van het uploaden te tonen:
curl --tr-encoding -X POST -v -# -o output -T filename.dat \
http://example.com/resource.cgi
De -o output
is vereist, anders verschijnt er geen voortgangsbalk.
Voor een RESTful HTTP POST met XML:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"
of voor JSON, gebruik deze:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
Dit zal de inhoud van het bestand met de naam filename.txt
lezen en als postverzoek versturen.
Gegevens van stdin met -d @-
Voorbeeld:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
is het voorbeeld dat te vinden is in de Curl Voorbeeld handleiding .
Gebruik %26 voor de amperzanden als het bovenstaande niet werkt:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
Als u wilt inloggen op een site, doe dan het volgende:
curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
Het eerste verzoek slaat de sessiecookie (die wordt verstrekt bij het succesvol inloggen) op in het “headers”-bestand. Vanaf nu kunt u die cookie gebruiken om u te authenticeren op elk deel van de website dat u normaal gesproken benadert na het inloggen met een browser.
curl -v --data-ascii var=value http://example.com
en er zijn nog veel meer opties, kijk op curl --help
voor meer informatie.
Als je lui bent, kun je google-chrome of firefox krijgen om al het werk voor je te doen.
Chrome gebruikt --data 'param1=hello¶m2=world'
die u leesbaarder kunt maken door een enkele -d
of -F
per parameter te gebruiken, afhankelijk van welk type POST-aanvraag u wilt verzenden, die naar keuze application/x-www-form-urlencoded
of multipart/form-data
kan zijn.
Dit wordt POST-ed als application/x-www-form-urlencoded
(gebruikt voor de meeste formulieren die geen bestandsuploads bevatten):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-d param1=hello \
-d name=dinsdale
Voor een multipart/form-data
POST gebruik je -F
(typisch gebruikt voor formulieren die bestandsuploads bevatten, of waar de volgorde van de velden belangrijk is, of waar meerdere velden met dezelfde naam nodig zijn):
curl http://httpbin.org/post \
-H "User-Agent: Mozilla/2.2" \
-F param1=hello \
-F name=dinsdale \
-F name=piranha
De User-Agent
header is normaal gesproken niet nodig, maar ik heb hem gewoon in het geval gegooid. Als u een aangepaste agent nodig heeft dan kunt u voorkomen dat u deze op elk verzoek moet instellen door het ~/.curlrc
bestand aan te maken dat bijv. User-Agent: "Mozilla/2.2"
bevat