2013-05-07 58 views
2

我有形式使與URL編碼蟒蛇簡單的GET/POST

http://somekey:[email protected]/getthisfile.json

我嘗試了所有的辦法,但得到錯誤的自定義網址:

方法1:

from httplib2 import Http 
ipdb> from urllib import urlencode 
h=Http() 
ipdb> resp, content = h.request("3b8138fedf8:[email protected]/admin/shop.json") 

錯誤:

No help on =Http() 

Got this method from here

方法2: 進口的urllib

urllib.urlopen(url).read() 

錯誤:

*** IOError: [Errno url error] unknown url type: '3b8108519e5378' 

我估計有點問題編碼..

我想...

ipdb> url.encode('idna') 
*** UnicodeError: label empty or too long 

有什麼辦法可以讓這個複雜的URL變得簡單易用。

回答

3

您正在使用基於PDB的調試器而不是交互式Python提示符。 h是PDB中的命令。使用!防止PDB從試圖解釋行命令:

!h = Http() 

urllib需要你傳遞一個完全合格的URL;您的網址是缺乏一個方案:

urllib.urlopen('http://' + url).read() 

您的網址不會出現在域名使用任何國際字符,這樣你就不需要使用IDNA編碼。

您可能想要查看第三方requests library;它與HTTP服務器更加容易和簡單的互動:

import requests 
r = requests.get('http://abc.myshopify.com/admin/shop.json', auth=("3b8138fedf8", "1d697a75c7e50")) 
data = r.json() # interpret the response as JSON data. 
1

目前事實上的HTTP庫,Python是Requests

import requests 
response = requests.get(
    "http://abc.myshopify.com/admin/shop.json", 
    auth=("3b8138fedf8", "1d697a75c7e50") 
) 
response.raise_for_status() # Raise an exception if HTTP error occurs 
print response.content # Do something with the content. 
+0

InvalidURL/ URL的標籤無效。 – 2013-05-07 17:00:32