HTTPConnection.request失败但urllib.request.urlopen有效吗?

时间:2012-07-20 00:23:13

标签: python-3.x urlopen

我已经被困在这里很长一段时间但找不到任何有用的东西。 我正在尝试连接到一个网站并在Python3中获取响应json文件。代码如下所示:

conn = http.client.HTTPConnection('host.address')
params = "xx"+ xx + "xx" + ...
conn.request('GET', '/a/b/c', params)
resp = conn.getresponse()

这实际上不会返回json文件,而是返回网页http://host.address/a/b/c,这是一个错误页面。 但是,在使用以下代码时:

params = "xx"+ xx + "xx" + ...
resp = urllib.request.urlopen("http://host.address/a/b/c?"+params)

它正确返回json文件。 知道代码有什么问题吗?

由于

2 个答案:

答案 0 :(得分:1)

在HTTP中,只有POST请求应该有一个正文。 request()的第三个参数实际上是正文(请参阅http://docs.python.org/py3k/library/http.client.html#http.client.HTTPConnection.request) - 只需构建URL,如第二个示例所示。

答案 1 :(得分:0)

只是用一个例子来补充@ sqrtsben的回答:

import urllib.parse
import http.client

u = urllib.parse.urlparse("http://localhost:8080/index.php?utf8=✓")
conn = http.client.HTTPConnection(u.hostname, u.port)
if u.query == '':
    conn.request("GET", u.path)
else:
    conn.request("GET", u.path + '?' + u.query)