البرمجة

كيفية إرسال قائمة في طلب GET باستخدام مكتبة Requests في Python

عند مواجهتك لمشكلة في إرسال قائمة (List) عبر طلب GET باستخدام مكتبة الطلبات (requests) في بايثون، يمكنك حل هذه المشكلة بتعديل الطريقة التي تمرر فيها القائمة كمتغير في الطلب. يبدو أن المشكلة تكمن في كيفية تشكيل المعطيات المرسلة إلى السيرفر.

في الكود الحالي الذي قدمته، قمت بتحميل القائمة في متغير باسم “payload” وقمت بإرسالها كمعلمة في عنوان URL. ولكن، يبدو أن السيرفر يفهم ذلك بطريقة غير صحيحة، حيث يظهر في الطلب النهائي أنه يُفهم على أنه يحتوي على معلمة مكررة لـ “id_list”.

لتجنب هذه المشكلة، يمكنك تعديل طريقة تشكيل الطلب. بدلاً من إضافة القائمة كمعلمة واحدة، يمكنك تحويلها إلى سلسلة نصية وإضافتها مباشرة إلى عنوان URL. يمكنك استخدام دالة “join” لتحويل القائمة إلى سلسلة نصية مفصولة بفواصل وإضافتها إلى العنوان.

في سياق الكود، يمكن تحسينه كالتالي:

python
my_list = ['x', 'y', 'z'] url = 'https://url.com/download' params = {'id_list': ','.join(my_list)} response = requests.get(url, params=params)

في هذا الكود، تم استخدام دالة “join” لتحويل القائمة إلى سلسلة نصية، حيث يتم فصل عناصر القائمة بفاصلة. وبذلك، يتم إضافة القائمة مباشرة إلى العنوان كقيمة واحدة لمعلمة “id_list”، وبالتالي يجب أن يتجنب الطلب النهائي مشكلة القيم المكررة.

باستخدام هذا التحسين، يمكنك تجنب رؤية رسائل الخطأ التي تشير إلى طلب غير صالح ويمكنك بنجاح الحصول على البيانات من الخادم.

المزيد من المعلومات

يتمثل الحل الذي تم توضيحه في استخدام مكتبة requests في بايثون لإرسال طلب GET إلى خادم مع معلمة استعلام تحتوي على قائمة من القيم. لكن دعنا نوسع المحادثة ونقدم بعض المعلومات الإضافية حول هذا الموضوع.

عندما تقوم بإرسال طلب GET، يتم تضمين المعلمات في عنوان URL. في هذه الحالة، قمنا بتحويل القائمة إلى سلسلة نصية واحدة تحتوي على العناصر المفصولة بفواصل. هذا يسمح للخادم بفهم الطلب بشكل صحيح.

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

يمكن أيضًا أن يكون هناك حاجة لترميز النص الذي يتم إرساله في المعلمات إذا كان يحتوي على أحرف غير ASCII. يمكنك استخدام urllib.parse في بايثون لترميز القيم.

إليك مثال إضافي يوضح كيفية التعامل مع الأحرف غير ASCII وترميز النص:

python
import requests from urllib.parse import quote url = 'https://url.com/download' my_list = ['مرحبا', 'hello', '你好'] # ترميز النصوص باستخدام quote encoded_list = [quote(item) for item in my_list] # تحويل القائمة إلى سلسلة مفصولة بفاصلة id_list_str = ','.join(encoded_list) # إنشاء معلمة الاستعلام بقيمة واحدة لـ id_list payload = {'id_list': id_list_str} # إجراء طلب GET مع معلمة الاستعلام المعدلة response = requests.get(url, params=payload) # طباعة الاستجابة print(response.text)

يتيح لك هذا الكود التعامل مع النصوص غير ASCII وترميزها بشكل صحيح أثناء إرسال الطلب.

زر الذهاب إلى الأعلى