أساسيات curl
curl Basics
أساسيات curl — curl Basics
curl أداة لإرسال طلبات HTTP من الطرفية. في Bash تستخدمها لفحص صحة موقع، جلب JSON صغير، أو إرسال webhook بسيط. أهم قاعدة: كن صريحاً في الخيارات. استخدم -sS للصمت مع إظهار الأخطاء، -L لتتبع التحويلات عند الحاجة، و--max-time لمنع الانتظار الطويل.
لا تبنِ سكربتاً يتوقف إلى الأبد لأن طلب HTTP لم يرد. ضع مهلة. ولا تطبع أسراراً في logs. إذا مررت token في header، تأكد أن السكربت لا يعرض الأمر الكامل في مخرجات عامة.
مثال حقيقي — طلب عام
هذا الأمر يطلب نقطة حقيقية بدون مصادقة:
-sS تعني: اكتم شريط التقدم (-s)، لكن أظهر الأخطاء (-S). --max-time 10 تمنع الانتظار الطويل.
المصادقة الآمنة — Authorization Header
المشكلة مع curl -H "Authorization: Bearer $TOKEN" أن الأمر بالكامل يظهر في مخرجات ps -ef أو قوائم العمليات. من لديه صلاحية قراءة تلك القوائم يرى الـtoken.
# هذا يُعرّض التوكن في ps -ef — exposed in process list
curl -H "Authorization: Bearer $TOKEN" https://api.example.com/data
الحلول الأكثر أماناً:
1. ملف ترويسات — Header file (-H @file):
# اكتب التوكن في ملف مؤقت آمن
token_file=$(mktemp)
chmod 600 "$token_file"
echo "Authorization: Bearer $TOKEN" > "$token_file"
curl -sS --max-time 10 -H "@$token_file" https://api.example.com/data
rm -f "$token_file"
2. ملف إعداد curl (--config):
# ~/.config/api.conf (permissions 600)
# header = "Authorization: Bearer <your-token>"
curl --config ~/.config/api.conf https://api.example.com/data
3. متغير بيئة + -H "$TOKEN_HEADER" — مقبول لكن ليس مثالياً:
export TOKEN_HEADER="Authorization: Bearer $TOKEN"
# المتغير لا يظهر في ps -ef، لكن يبقى في البيئة
curl -sS -H "$TOKEN_HEADER" https://api.example.com/data
في بيئات الإنتاج، الأسلوب الأول (ملف ترويسات مؤقت مع trap للحذف) هو الأضمن.
تحذير: لا تستخدم -k
خيار -k (أو --insecure) يعطل التحقق من شهادة TLS. قد تراه في أمثلة على الإنترنت للحل السريع لأخطاء الشهادات. لا تستخدمه في الإنتاج. يُعرّضك لهجمات man-in-the-middle حيث يمكن لطرف ثالث قراءة البيانات وتعديلها بصمت. بدل ذلك:
- تأكد أن شهادة الخادم صحيحة ومن CA موثوقة.
- إذا كنت تختبر خادماً محلياً بشهادة ذاتية، استخدم
--cacert /path/to/ca.crtبدل تعطيل التحقق.
متى يكفي Bash؟
لفحص endpoint أو إرسال طلب بسيط، Bash وcurl كافيان. لبناء عميل API كامل يتعامل مع pagination وauth وتجديد tokens وأخطاء كثيرة، استخدم لغة تطبيقات.