सरल मिल / पोस्ट अनुरोध अजगर 3 में अवरुद्ध है लेकिन अजगर 2 में नहीं


19

मैं अजगर 3 में एक साधारण वेब खुरचनी पर काम कर रहा हूं, लेकिन जब मुझे कोई अनुरोध या पोस्ट अनुरोध भेजा जाता है, तो प्रतिक्रिया 403 होती है। अजगर 2 में ठीक काम करता है। मैं दोनों संस्करणों में अनुरोध पुस्तकालयों के एक ही संस्करण का उपयोग कर रहा हूं। मैंने भी कोशिश की है Verify=False/Trueलेकिन दोनों संस्करणों में अंतर बना हुआ है।

अनुरोध = 2.22.0

सर्टिफिकेट = 2019.9.11

from requests import get
url = 'https://www.gamestop.com/'
header = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.5',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
    'DNT': '1',
    'Upgrade-Insecure-Requests': '1',
    'Connection': 'keep-alive',
    'Host': 'www.gamestop.com'
}
res = get(url, headers=header, verify=False).status_code
print(res)
# 403 when using python 3.7.4
# 200 when using python 2.7.16

@Blhsing द्वारा संपादित करें:

नीचे दी गई सूची पर नज़र रखता है कि कौन से विशिष्ट पायथन संस्करण काम करते हैं और कौन से संस्करण टिप्पणियों के अनुसार विफल होते हैं। अब तक की सफलताओं और असफलताओं को प्लेटफार्मों भर में प्रत्येक विशिष्ट पायथन संस्करण के लिए संगत किया गया है।

परिणामों के उत्पादन के लिए उपयोग किए जाने वाले विशिष्ट पायथन संस्करणों के साथ अपने स्वयं के परिणामों के साथ प्रश्न के इस भाग को संपादित करने के लिए स्वतंत्र महसूस करें।

2.7.14 works (blhsing)
2.7.16 works (repl.it)
3.6.5 works (blhsing)
3.6.8 fails (Reinderien and blhsing)
3.7.3 works (wim and blhsing)
3.7.4 fails (repl.it and blhsing)
3.8.0 fails (OP)

Repl.it पर डेमो: पायथन 2.7.16 और पायथन 3.7.4


यह ध्यान दिया जाना चाहिए कि यह पायथन 3.6 में काम करता है लेकिन 3.7 में नहीं।
blhsing

मुझे फ़ायरफ़ॉक्स में भी "एक्सेस अस्वीकृत" मिलता है - पायथन 3.7 में कुछ रन कोड के बाद। मैंने पायथन चलाने से पहले फ़ायरफ़ॉक्स में कोशिश नहीं की थी - शायद मैं पायथन कोड का उपयोग करने के बाद अवरुद्ध हूं या शायद यह अन्य कारण से अवरुद्ध करता है - गलत आईपी, गलत देश, सर्वर पर समस्या।
फरसा

1
@ हाँ, यह अजीब है, मुझे लगता है कि मैं 3.6 के साथ फिर जाऊंगा, नोट के लिए thx
EDM

2
वह अजीब है। Wireshark का उपयोग करें और पायथन 3.6 और 3.7 द्वारा भेजे गए अनुरोधों की तुलना करें। वहाँ कुछ अंतर होगा सर्वर पर उठा रहा है।
गोर्डनैचजय

1
फिर यह संभवतः अलग-अलग ओपनसेल ( ssl.OPENSSL_VERSION) के कारण होता है । आपको उन सभी शीर्ष लेखों को पुन: प्रस्तुत करने की आवश्यकता नहीं है, बस एक सादा पुराना (url) प्राप्त होगा।
विम

जवाबों:


9

यह urlib3 द्वारा फेंका गया अपवाद है:

/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/urllib3/connectionpool.py:1004: InsecureRequestWarning: असत्यापित HTTPS अनुरोध किया जा रहा है। प्रमाणपत्र सत्यापन को जोड़ने की जोरदार सलाह दी जाती है। देखें: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning,

नवीनतम जारी नोटों के अनुसार , खंड 1.25.5 (2019-09-19) :

बीपीओ -37428 के लिए शमन को प्रभावित करें Python <3.7.4 और OpenSSL 1.1.1+ जो सर्टिफिकेट वेरिफिकेशन को सर्टिफ़िकेट = CERT_NONE का उपयोग करते समय सक्षम करने का कारण बनते हैं। (अंक # 1682 )

आप गितुब पर मुद्दे का पालन कर सकते हैं , इसे बंद कर दिया गया है।

TLDR

Github पर उपयोगकर्ता @sethmlarson पर इस बग मिला urllib3 :

create_urllib3_context ():

    # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is
    # necessary for conditional client cert authentication with TLS 1.3.
    # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older
    # versions of Python.
    if getattr(context, "post_handshake_auth", None) is not None:
        context.post_handshake_auth = True

यह मान सेट करने Trueसे अक्षम होने के बजाय सर्वर प्रमाणपत्र का सत्यापन सक्षम हो जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.