urllib.py ไม่ทำงานกับ https?

ในแอป python ของฉัน ฉันพยายามเปิด URL https แต่ฉันได้รับ:

 File "C:\Python26\lib\urllib.py", line 215, in open_unknown
    raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: 'https'

รหัสของฉัน:

import urllib
def generate_embedded_doc(doc_id):
    url = "https://docs.google.com/document/ub?id=" + doc_id + "&embedded=true"
    src = urllib.urlopen(url).read()
    ...
    return src

person Vladimir Keleshev    schedule 19.09.2010    source แหล่งที่มา
comment
การใช้ SSL ในกรณีนี้ไม่มีประโยชน์ คุณเชื่อมต่อจากบริการ Google หนึ่งไปยังอีกบริการหนึ่ง ฉันไม่คิดว่ามีความเสี่ยงที่จะถูกโจมตี MITM :-)   -  person leoluk    schedule 19.09.2010


คำตอบ (3)


urllib และ Python 2.6 รองรับ SSL และตัวอย่างโค้ดของคุณใช้ได้ดีสำหรับฉัน Python ของคุณอาจถูกสร้างขึ้นโดยไม่รองรับ SSL หรือไม่ ลองติดตั้ง Python 2.6 ใหม่ (หรือดีกว่า 2.7) และใช้เวอร์ชันดั้งเดิมจาก python.org

บน Google App Engine ลองใช้ API โดยตรง:

from google.appengine.api import urlfetch

url = "https://www.google.com/"
result = urlfetch.fetch(url)
if result.status_code == 200:
  doSomethingWithResult(result.content)
person leoluk    schedule 19.09.2010
comment
ฉันมี Python 2.6 แต่เนื่องจากฉันใช้ GAE มันอาจมีข้อจำกัดบางประการ (เพราะมันสร้างสำหรับ Python 2.5) - person Vladimir Keleshev; 19.09.2010
comment
ฉันได้ขยายคำตอบของฉันแล้ว คุณใช้ SDK ของ Google หรือไม่? ไม่รองรับ Python 2.6 แต่เส้นทางในตัวอย่างของคุณคือ C:\Python26\lib\urllib.py - person leoluk; 19.09.2010
comment
urllib, urllib2 และ httplib ไม่ตรวจสอบใบรับรองเซิร์ฟเวอร์เมื่อใช้ HTTPS ซึ่งไม่ได้ทำให้การใช้ HTTPS มีความปลอดภัย (มีวิธีแก้ไข แต่ต้องมีโค้ดเพิ่มเติมอีกเล็กน้อย) - person Bruno; 19.09.2010

หากต้องการรองรับ SSL คุณต้องคอมไพล์ Python ด้วย OpenSSL ตัวอย่างเช่นภายใต้ Ubuntu lucid คุณต้องติดตั้งโมดูล libcurl4-openssl-dev จากนั้นสร้าง Python อีกครั้ง

person axaroth    schedule 31.05.2011

ลองใช้ urllib2 แทน

ฉันมีปัญหาเดียวกันกับ urllib บน OSX 10.6 โดยใช้ python 2.6.6 จาก macports การเปลี่ยนไปใช้ urllib2 แก้ไขแล้ว

person s29    schedule 04.11.2010
comment
คุณจะเปลี่ยนเป็น urllib2 ได้อย่างไร? ฉันมีปัญหาเดียวกันบน mac ของฉัน! - person Maverik; 12.08.2011
comment
คุณต้องนำเข้า urllib2 แทน urllib และเขียนโค้ดของคุณใหม่เพื่อให้เหมาะสม มันคล้ายกันแต่ไม่เหมือนกัน ตรวจสอบเอกสารหลาม - person s29; 17.08.2011
comment
อีกสิ่งหนึ่งจากหน่วยความจำที่ทำให้เกิดข้อผิดพลาดที่คล้ายกันคือการมีไฟล์อื่นชื่อ ssl.py หรือ ssl.pyc อยู่ที่ไหนสักแห่งบน pythonpath ของคุณ เปลี่ยนชื่อหรือลบมัน - person s29; 17.08.2011