سؤال ما هي بنية سطر الأوامر cURL لتنفيذ طلب POST؟


كيف يمكنني صنع بريد طلب مع لفة أداة سطر الأوامر؟


2088
2017-09-17 15:39


الأصل




الأجوبة:


مع الحقول:

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

مع الحقول المحددة بشكل فردي:

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

متعددة الأجزاء:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart مع الحقول واسم الملف:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

بدون بيانات:

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

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

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

لمزيد من المعلومات، راجع دليل cURL. ال cURL البرنامج التعليمي على محاكاة متصفح الويب مفيد.

مع libcurl ، استخدم curl_formadd() وظيفة لبناء النموذج الخاص بك قبل تقديمه بالطريقة المعتادة. شاهد وثائق ليبكورل للمزيد من المعلومات.

بالنسبة إلى الملفات الكبيرة ، ضع في اعتبارك إضافة المعلمات لإظهار تقدم التحميل:

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

ال -o output مطلوب ، وإلا لن يظهر شريط تقدم.


2414
2017-09-17 15:43



LauriRanta --data-urlencode (لا شرطة) ، في الإصدارات الحديثة على الأقل - waitinforatrain
كما يعمل إذا كنت بحاجة إلى تحديث مورد مع PUT: curl -X PUT ... - Subfuzion
أواجه مشكلة في الفهم ... متى أفعل ذلك With Fieldsمتى Multipart وعندما Without Data؟ - CodyBugstein
بدلا من --data يمكنك استخدام -d. - user35538
لدي مجموعة من المجالات. كيف يمكنني أن أفعل هذا؟ - ARUNBALAN NV


للحصول على POSTful HTTP POST يحتوي على XML:

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

أو لـ JSON ، استخدم هذا:

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

سيقرأ هذا محتويات الملف المسمى filename.txt وإرسالها كطلب نشر.


487
2018-03-10 08:29



@ tom-wijsman explanation: curl -X POST يتضمن طلب HTTP POST ، و -d المعلمة (نسخة طويلة: --dataيخبر curl أن ما يلي سيكون POST المعلمات ، و @filename يعيّن محتويات الملف filename كمعلمة. يعمل هذا الأسلوب بشكل أفضل مع RESTful HTTP APIs كما هو موجود في Twitter و Facebook والعديد من خدمات الويب الأخرى بما في ذلك Ruby on Rails وكذلك HTTP APIs من قواعد البيانات مثل CouchDB. REST تعني نقل الدولة التمثيلي - soundmonster
كيف يمكن أن نرى استجابة xml لا في سطر واحد ولكن منسقة؟ - Vitaly Zdanevich
أعتقد أنه يمكنك ترك -X POST لأن هذا ضمني -d. - benjifisher
كيفية إعطاء رؤوس متعددة؟ - keya
رؤوس متعددة: curl -H "header2: 1" -H "header2: 2" ... - Tomáš Kratochvíla


بيانات من stdin: استعمال -d @-. مثال:

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

انتاج:

<p>Hello <strong>world</strong>!</p>

121
2018-03-25 19:35



رائع إذا كان لديك كائن JSON موجود بالفعل في الحافظة - Luca Steeb
أفضل: صدى "رسالة $" | curl -H "Content-Type: application / json" -d @ - "$ url" - rzr


curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

هو المثال الموجود في تجعيد مثال دليل.

استخدم٪ 26 لعلامات العطف على الرغم من أن ما سبق لا يعمل:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 

65
2017-09-17 15:42





إذا كنت ترغب في تسجيل الدخول إلى موقع ، قم بما يلي:

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

يقوم الطلب الأول بحفظ ملف تعريف ارتباط جلسة العمل (الذي يتم توفيره عند تسجيل الدخول بنجاح) في ملف "رؤوس". من الآن فصاعدًا ، يمكنك استخدام ملف تعريف الارتباط هذا لمصادقتك في أي جزء من موقع الويب الذي عادة ما تصل إليه بعد تسجيل الدخول باستخدام متصفح.


58
2018-03-04 02:21



ملاحظة من صفحة "curl" man: "الخيار -c ، --cookie-jar هو أفضل طريقة لتخزين ملفات تعريف الارتباط". - maxschlepzig


curl -v --data-ascii var=value http://example.com

وهناك العديد من الخيارات ، تحقق curl --help للمزيد من المعلومات.


32
2017-09-17 15:43





إذا كنت كسولًا ، يمكنك الحصول على google-chrome للقيام بكل الأعمال نيابة عنك.

  1. انقر بزر الماوس الأيمن على النموذج الذي تريد إرساله وتحديده فحص. سيؤدي ذلك إلى فتح لوحة DevTools.
  2. اختر شبكة الاتصال علامة التبويب في devtools ووضع علامة في الحفاظ على السجل مربع.
  3. أرسل النموذج وحدد موقع الإدخال بطريقة POST (انقر بزر الماوس الأيمن فوق أي رأس عمود وتأكد من ذلك طريقة مفحوص).
  4. انقر بزر الماوس الأيمن على الخط مع POST ، وحدد نسخ > انسخ كـ cURL.

chrome devtools: copy as cURL

سينسخ Chrome جميع بيانات الطلب في بنية cURL.

يستخدم كروم --data 'param1=hello&param2=world' التي يمكنك جعلها أكثر قابلية للقراءة باستخدام واحدة -d أو -F لكل معلمة اعتمادًا على نوع طلب POST الذي تريد إرساله ، والذي يمكن أن يكون أيضًا application/x-www-form-urlencoded أو multipart/form-data وفقا لذلك.

سيكون هذا هو POST-ed كـ application/x-www-form-urlencoded (يستخدم في معظم النماذج التي لا تحتوي على تحميلات الملفات):

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

ل multipart/form-data استخدام POST -F (عادةً ما تستخدم مع النماذج التي تحتوي على تحميلات الملفات ، أو عندما يكون ترتيب الحقول مهمًا ، أو إذا كانت الحقول المتعددة التي تحمل الاسم نفسه مطلوبة):

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

ال User-Agent ليست هناك حاجة عادة إلى رأس ، ولكن أنا ألقيت عليه في حالة فقط. يمكنك تجنب الاضطرار إلى تعيين وكيل المستخدم على كل طلب عن طريق إنشاء ~/.curlrc الملف الذي يحتوي على e.g. User-Agent: "Mozilla/2.2"


17
2017-09-29 08:06