سؤال

أنا أستخدم Pycurl لاختبار خدمة إعادة التوجيه التي نقدمها- يضرب المستخدم http://xyz.com/asdf/ ويتم إعادة توجيهها إلى https://a.com, https://b.com و https://c.com.

أحاول استخدام Pycurl لطلب http://xyz.com, ، وطباعة (ولكن ليس طلب HTTP) السلسلة "https: // {a | b | c} .com" ، ولكن عندما يكون عنوان URL الوجهة هو https وليس http ، pycurl.request () طريقة الاستثناء التالي:

(35, 'gnutls_handshake() failed: A TLS fatal alert has been received.')

لا يظهر Googling لـ "Pycurl TLS Error" العديد من النتائج ، باستثناء ما يلمح إلى أن Pycurl لـ Ubuntu يستخدم Gnutls بدلاً من OpenSSL. هل هذا ما يسبب مشكلتي؟ إذا كان الأمر كذلك ، كيف يمكنني تكوين Pycurl لاستخدام OpenSSL؟

نظام التشغيل الخاص بي هو Ubuntu 9.10 ، Python 2.6 ، وإليك معلومات إصدار Pycurl الخاصة بي

>>> pycurl.version_info()

(3, '7.19.5', 463621, 'x86_64-pc-linux-gnu', 1597, 'GnuTLS/2.8.3', 0, '1.2.3.3', ('tftp', 'ftp', 'telnet', 'dict', 'ldap', 'ldaps', 'http', 'file', 'https', 'ftps'), None, 0, '1.15')

شكرا مقدما!

هل كانت مفيدة؟

المحلول

أنا فقط حل نفس المشكلة. لست متأكدًا بنسبة 100 ٪ ما هو الخطأ. لكنني قمت بتثبيت pycurl عبر apt-get install python-pycurl الذي أعتقد أنه افتراضيًا يستخدم Gnutls ، لكن يبدو لي أنه يجب أن يكون Openssl على نظامي.

لقد حلت ذلك عن طريق القيام بما يلي:

export PYCURL_SSL_LIBRARY=[openssl|gnutls|nss] (اختر واحدًا من 3 ، OpenSSL ، Gnutls أو NSS ، بدون قوسين)

pip install pycurl --upgrade

إذا كان إصدار Pycurl الخاص بك بالفعل في أحدث إصدار ، فقم بإزالته عن طريق تنفيذ الأمر التالي pip uninstall pycurl وتشغيل الأوامر أعلاه.

مصدر: http://pycurl.sourceforge.net/doc/install.html

نصائح أخرى

يستخدم Pycurl libcurl ويمكن بناء libcurl لاستخدام واحدة من عدة مكتبات TLS. gnutls و openssl كونه اثنين منهم. يمكنك بالتالي إعادة بناء libcurl لاستخدام أي من تلك التي تفضلها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top