Python URLLib / URLLib2 POST

Posted

技术标签:

【中文标题】Python URLLib / URLLib2 POST【英文标题】: 【发布时间】:2011-03-15 09:55:25 【问题描述】:

我正在尝试使用 wx/Python 创建一个超级简单的虚拟输入/输出板。我已经为我将存储数据的服务器的请求之一准备了以下代码:

data = urllib.urlencode('q': 'Status')
u = urllib2.urlopen('http://myserver/inout-tracker', data)
for line in u.readlines():
  print line

那里没有什么特别的。我遇到的问题是,根据我阅读文档的方式,这应该执行一个发布请求,因为我已经提供了数据参数并且没有发生。我在该网址的索引中有此代码:

if (!isset($_POST['q']))  die ('No action specified'); 
echo $_POST['q'];

每次我运行我的 Python 应用程序时,我都会在控制台上打印“未指定操作”文本。我将尝试使用请求对象来实现它,因为我已经看到了一些包含这些的演示,但我想知道是否有人可以帮助我解释为什么我没有使用此代码获得发布请求。谢谢!

-- 已编辑--

此代码可以正常工作并正确发布到我的网页:

data = urllib.urlencode('q': 'Status')
h = httplib.HTTPConnection('myserver:8080')
headers = "Content-type": "application/x-www-form-urlencoded", 
           "Accept": "text/plain"
h.request('POST', '/inout-tracker/index.php', data, headers)
r = h.getresponse()
print r.read()

我仍然不确定为什么 urllib2 库在我提供数据参数时不发布 - 对我来说,文档表明它应该。

【问题讨论】:

你为什么不用urllib2 我是。 urllib2.urlopen。我只使用 urllib 来编码帖子数据。 【参考方案1】:
u = urllib2.urlopen('http://myserver/inout-tracker', data)
h.request('POST', '/inout-tracker/index.php', data, headers)

使用没有尾随 / 的路径 /inout-tracker 不会获取 index.php。相反,服务器将发出 302 重定向到带有尾随 / 的版本。

执行 302 通常会导致客户端将 POST 转换为 GET 请求。

【讨论】:

这个答案很完美! Python 2.6 urllib2 模块在重定向时会从 POST 切换到 GET。这不仅发生在尾部正斜杠上,也可能发生在 http 重定向到 https 的情况下。

以上是关于Python URLLib / URLLib2 POST的主要内容,如果未能解决你的问题,请参考以下文章

httplib urllib urllib2 pycurl 比较

Python2 urllib2用不了???求解。。。

python3.4没有 urllib2

python urllib 和 urllib2

Python:urllib 和urllib2之间的区别

python urllib2模块 在哪里下载?