我有一个表格的自定义网址
http://somekey:somemorekey@host.com/getthisfile.json
我一直试着但得到错误:
方法1:
from httplib2 import Http
ipdb> from urllib import urlencode
h=Http()
ipdb> resp, content = h.request("3b8138fedf8:1d697a75c7e50@abc.myshopify.com/admin/shop.json")
错误:
No help on =Http()
方法2: import urllib
urllib.urlopen(url).read()
错误:
*** IOError: [Errno url error] unknown url type: '3b8108519e5378'
我猜编码有问题..
我试过......
ipdb> url.encode('idna')
*** UnicodeError: label empty or too long
有没有什么方法可以让这个复杂的网址变得简单。
答案 0 :(得分:3)
您正在使用基于PDB的调试器而不是交互式Python提示符。 h
是PDB中的命令。使用!
阻止PDB尝试将该行解释为命令:
!h = Http()
urllib
要求您传递一个完全限定的网址;您的网址缺少方案:
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 :(得分:1)
目前用于Python的事实上的HTTP库是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.