2

我有一个表单的自定义网址

http://somekey:somemorekey@host.com/getthisfile.json

我一直尝试但出现错误:

方法一:

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:导入urllib

urllib.urlopen(url).read()

错误 :

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

我猜编码有问题..

我试过了 ...

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

有什么方法可以让这个复杂的 url 变得容易调用。

4

2 回答 2

3

您正在使用基于 PDB 的调试器而不是交互式 Python 提示符。h是 PDB 中的命令。用于!防止 PDB 尝试将该行解释为命令:

!h = Http()

urllib要求您向其传递完全限定的 URL;您的网址缺少方案:

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

您的 URL 似乎没有在域名中使用任何国际字符,因此您不需要使用 IDNA 编码。

您可能想查看 3rd-party requestslibrary;它使与 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.
于 2013-05-07T16:26:22.477 回答
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.
于 2013-05-07T16:29:09.453 回答