Curl: التنزيل من عنوان URL الديناميكي
-
23-09-2019 - |
سؤال
أحاول تنزيل ملف HTML مع حليقة في باش. مثل هذا الموقع:http://www.registrar.ucla.edu/schedule/detselect.aspx؟tramsel=10s&subareasel=physics&idxcrs=0001b+++
عندما أقوم بتنزيله يدويًا ، يعمل بشكل جيد. ومع ذلك ، عندما أحاول تشغيل البرنامج النصي من خلال Crontab ، فإن ملف HTML الإخراج صغير جدًا ويقول فقط "تم نقل الكائن إلى هنا". مع رابط مكسور. هل هذا له علاقة بالبيئة المتفرقة التي تديرها أوامر crontab؟ لقد وجدت هذا السؤال:
PHP SSL Curl: خطأ تم نقل الكائن
لكني أستخدم باش ، وليس PHP. ما هي خيارات أو متغيرات سطر الأوامر المكافئ لضبطها لإصلاح هذه المشكلة في باش؟
(أريد أن أفعل هذا باستخدام حليقة ، وليس WGET)
تحرير: حسنًا ، يعمل تنزيل الملف أحيانًا يدويًا (عبر تفاعلي Shell) ، ولكن في بعض الأحيان لا (ما زلت أحصل على رسالة "الكائن الموجود هنا"). لذلك قد لا تكون AA مشكلة على وجه التحديد في بيئة كرون ، ولكن مع حليقة نفسها.
دخول كرون:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1
test.sh:
#! /bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/sbin
cd ~/.class
course="physics 1b"
url="http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S<URL>subareasel=PHYSICS<URL>idxcrs=0001B+++"
curl "$url" -sLo "$course".html --max-redirs 5
تحرير: حل المشكلة. كانت القضية هي العلامات الضالة في عنوان URL. كان ذلك لأنني كنت أفعل sed s,"<URL>",\""$url"\", template.txt > test.sh
لتوليد البرامج النصية واستبدلت جميع حالات &
مع التعبير العادي <URL>
. بعد إصلاح عنوان URL ، يعمل Curl بشكل جيد.
المحلول
تريد -L
أو --location
الخيار ، الذي يتبع 300 سلسلة إعادة توجيه. --maxredirs [n]
سوف تحد من حليقة n
إعادة التوجيه.
من الغريب أن هذا يعمل من قذيفة تفاعلية. هل تجلب عنوان URL نفسه؟ يمكنك دائمًا محاولة تحديد مصادر البرامج النصية للبيئة في إدخال كرون الخاص بك:
* * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...
تعديل: عنوان URL يختلف إلى حد ما عن العنوان الموجود في البرنامج النصي. $url
في البرنامج النصي لديه زوج إضافي من <URL>
العلامات. استبدالهم مع &
, ، الحجة التقليدية على الفصلين ل GET
الطلبات ، تعمل من أجلي.
نصائح أخرى
دون رؤية البرنامج النصي الخاص بك ، من الصعب تخمين ما يجري بالضبط ، ولكن من المحتمل أن تكون مشكلة بيئة أثناء تواجدك.
الشيء الوحيد الذي يساعد في كثير من الأحيان هو تحديد المسار الكامل للمقاتلين التنفيذيين والملفات في البرنامج النصي الخاص بك.
إذا عرضت البرنامج النصي وإدخال Crontab ، فيمكننا أن نكون مزيد من المساعدة.