使用url编码python进行简单的GET / POST

时间:2013-05-07 16:20:12

标签: python http url

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

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()

Got this method from here

方法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

有没有什么方法可以让这个复杂的网址变得简单。

2 个答案:

答案 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.