目前,僅支持以下幾種協(xié)議: HTTP, ( 0.9版和 1.0版), FTP, 和本地文件咖驮。
urlretrieve()
的緩存功能已經(jīng)被取消了鞭呕,知道我有時間破解 headers 時間過期合適的處理方法。
應該有一個方法來查詢特定的URL有沒有在緩存中壁熄。
至于后向兼容核偿,如果URL指向一個打不開的本地文件诚欠,那么URL會被重新使用FTP協(xié)議編譯。 這個問題有時候會造成令人迷惑得錯誤信息漾岳。
urlopen()
和 urlretrieve()
函數(shù)會在等待網(wǎng)絡連接建立時造成反復無常的長延遲聂薪。 這意味著很難建立一個不使用多線程的互動Web端(譯者注:簡而言之,就是要在程序中用異步獲取來避免與用戶的互動因為網(wǎng)絡問題等響應很緩慢)
urlopen()
或 urlretrieve()
返回的未經(jīng)過處理的是服務器返回數(shù)據(jù)is the raw data returned by the server.這可能會是二進制數(shù)據(jù)(比如圖片)蝗羊,純文本(舉個例子)或者HTML藏澳。HTTP協(xié)議在返回頭部中提供了類型信息,這可以通過查看"Content-Type"來檢測耀找, 如果返回的是HTML翔悠,你可以使用 htmllib
組件來解析(譯者注:推薦BeautifulSoup)业崖。
代碼處理FTP協(xié)議處理文件和文件夾(目錄)是沒有差別的。這可能會在嘗試讀取一個指向不可訪問的文件的URL時導致意外的行為蓄愁。 如果URL以“/”
結(jié)尾双炕,這會被認為指向文件夾并以對應的方式處理。但是如果嘗試讀取的文件導致了550錯誤(URL無法找到或這無法訪問撮抓,通常是無權(quán)訪問)妇斤,然后路徑就會被認為是目錄,以處理通過URL指定的目錄沒加"/"的情況丹拯。這可能會造成錯誤的結(jié)果當你嘗試無權(quán)訪問的文件站超;FTP代碼將會嘗試去讀取,報錯550乖酬,然后對不可讀取的文件執(zhí)行目錄列舉死相。如果需要fine-grained(高密度?)控制咬像,考慮使用ftplib
組件, FancyURLopener
子類, 或者改變urlopener 迎合你的需求.
這個組件不支持需要認證的代理算撮,這個功能會在將來實現(xiàn)。
雖然 urllib
組件包含(沒有做入文檔)解析和反解析URL字符串的方案县昂,推薦的URL操控接口還是在 urlparse
中肮柜。