ฉันกำลังทำงานกับ web scraper อย่างง่ายใน python 3 แต่เมื่อฉันส่งรับหรือโพสต์คำขอการตอบสนองคือ 403 ใน python 2 ทำงานได้ดี ฉันใช้ไลบรารี่คำขอรุ่นเดียวกันทั้งสองเวอร์ชัน ฉันได้ลองด้วยVerify=False/True
แต่ความแตกต่างในทั้งสองรุ่นยังคงอยู่
คำร้องขอ = 2.22.0
certifi = 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:
รายการด้านล่างติดตามว่ามีการใช้งานเวอร์ชัน Python ใดและรุ่นใดที่ล้มเหลวตามความคิดเห็น จนถึงความสำเร็จและความล้มเหลวนั้นสอดคล้องกับ Python แต่ละรุ่นในแต่ละแพลตฟอร์ม
รู้สึกอิสระที่จะแก้ไขส่วนนี้ของคำถามด้วยผลลัพธ์ของคุณเองพร้อมกับรุ่น Python เฉพาะที่ใช้ในการสร้างผลลัพธ์
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: Python 2.7.16และPython 3.7.4
ssl.OPENSSL_VERSION
) ที่แตกต่างกัน คุณไม่ต้องการส่วนหัวเหล่านั้นทั้งหมดเพื่อทำซ้ำเพียงรับ (URL) แบบธรรมดาจะทำ