دليل curl لطلبات HTTP

curl هي أداة رائعة تتيح لك إنشاء طلبات الشبكة من سطر الأوامر

curl عبارة عن أداة سطر أوامر تسمح بنقل البيانات عبر الشبكة.

يدعم الكثير من البروتوكولات خارج الصندوق ، بما في ذلك HTTP و HTTPS و FTP و FTPS و SFTP و IMAP و SMTP و POP3 وغيرها الكثير.

عندما يتعلق الأمر بتصحيح أخطاء طلبات الشبكة ، فإن curl هو أحد أفضل الأدوات التي يمكنك العثور عليها.

إنها إحدى تلك الأدوات التي بمجرد أن تعرف كيفية استخدامها تعود إليها دائمًا. أفضل صديق للمبرمج.

إنه عالمي ، ويعمل على Linux و Mac و Windows. الرجوع إلىدليل التثبيت الرسميلتثبيته على نظامك.

حقيقة ممتعة: مُنِح مؤلف ومسؤول curl ، السويدي ، من قبل ملك السويد لمساهمات عمله (curl and libcurl) في عالم الحوسبة.

دعنا نتعمق في بعض الأوامر والعمليات التي من المرجح أن ترغب في تنفيذها عند العمل مع طلبات HTTP.

تتضمن هذه الأمثلة العمل باستخدام بروتوكول HTTP ، وهو البروتوكول الأكثر شيوعًا.

تنفيذ طلب HTTP GET

عند تنفيذ طلب ، سيعيد curl نص الاستجابة:

curl https://flaviocopes.com/

احصل على رؤوس استجابة HTTP

بشكل افتراضي ، يتم إخفاء رؤوس الاستجابة في إخراج curl. لتظهر لهم ، استخدمiاختيار:

curl -i https://flaviocopes.com/

احصل فقط على رؤوس استجابة HTTP

باستخدامIالخيار ، يمكنك الحصول عليهفقطالرؤوس وليس نص الاستجابة:

curl -I https://flaviocopes.com/

قم بتنفيذ طلب HTTP POST

الXيتيح لك الخيار تغيير طريقة HTTP المستخدمة. بشكل افتراضي ، يتم استخدام GET ، وهي نفس الكتابة

curl -X GET https://flaviocopes.com/

استخدام-X POSTسيتم تنفيذ طلب POST.

يمكنك تنفيذ طلب POST لتمرير عنوان URL للبيانات المشفر:

curl -d "option=value&something=anothervalue" -X POST https://flaviocopes.com/

في هذه الحالة ، فإنapplication/x-www-form-urlencodedيتم إرسال نوع المحتوى.

قم بتنفيذ طلب HTTP POST بإرسال JSON

بدلاً من نشر البيانات المشفرة بعنوان URL ، كما في المثال أعلاه ، قد ترغب في إرسال JSON.

في هذه الحالة ، تحتاج إلى تعيين رأس نوع المحتوى بشكل صريح ، باستخدام ملفHاختيار:

curl -d '{"option": "value", "something": "anothervalue"}' -H "Content-Type: application/json" -X POST https://flaviocopes.com/

يمكنك أيضًا إرسال ملف JSON من القرص الخاص بك:

curl -d "@my-file.json" -X POST https://flaviocopes.com/

قم بتنفيذ طلب HTTP PUT

المفهوم هو نفسه لطلبات POST ، ما عليك سوى تغيير طريقة HTTP باستخدام-X PUT

اتبع إعادة التوجيه

استجابة إعادة توجيه مثل 301 ، والتي تحدد ملفLocationرأس الاستجابة ، يمكن أن يتبعه تلقائيًا تحديدLاختيار:

curl http://flaviocopes.com/

لن يتبع تلقائيًا إصدار HTTPS الذي قمت بإعداده لإعادة التوجيه إليه ، ولكن هذا سوف:

curl -L http://flaviocopes.com/

قم بتخزين الرد على ملف

باستخدامoيمكنك إخبار curl بحفظ الرد على ملف:

curl -o file.html https://flaviocopes.com/

يمكنك أيضًا حفظ ملف باسمه على الخادم باستخدام امتدادOاختيار:

curl -O https://flaviocopes.com/index.html

استخدام مصادقة HTTP

إذا كان أحد الموارد يتطلب مصادقة HTTP أساسية ، فيمكنك استخدام ملحقuخيار تمرير المستخدم: قيم كلمة المرور:

curl -u user:pass https://flaviocopes.com/

قم بتعيين وكيل مستخدم مختلف

يخبر وكيل المستخدم الخادم عن العميل الذي يقوم بتنفيذ الطلب. بشكل افتراضي ، يرسل curl ملفcurl/<version>وكيل المستخدم ، مثل:curl/7.54.0.

يمكنك تحديد وكيل مستخدم مختلف باستخدام--user-agentاختيار:

curl --user-agent "my-user-agent" https://flaviocopes.com

تدقيق كافة تفاصيل الطلب والرد

استخدم ال--verboseخيار لعمل curl الإخراج بكافة تفاصيل الطلب ، والاستجابة:

curl --verbose -I https://flaviocopes.com/
*   Trying 178.128.202.129...
* TCP_NODELAY set
* Connected to flaviocopes.com (178.128.202.129) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: flaviocopes.com
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> HEAD / HTTP/1.1
> Host: flaviocopes.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Cache-Control: public, max-age=0, must-revalidate
Cache-Control: public, max-age=0, must-revalidate
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Date: Mon, 30 Jul 2018 08:08:41 GMT
Date: Mon, 30 Jul 2018 08:08:41 GMT
...

Copying any browser network request to a curl command

When inspecting any network request using the Chrome Developer Tools, you have the option to copy that request to a curl request:

curl 'https://github.com/curl/curl' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'Upgrade-Insecure-Requests: 1' -H 'DNT: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://www.google.it/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9,it;q=0.8' -H 'Cookie: _octo=GH1.1.933116459.1507545550; _ga=GA1.2.643383860.1507545550; tz=Europe%2FRome; user_session=XXXXX; __Host-user_session_same_site=YYYYYY; dotcom_user=flaviocopes; logged_in=yes; has_recent_activity=1; _gh_sess=ZZZZZZ' --compressed

More network tutorials: