Python URLLib / URLLib2 POST

我正在尝试使用wx / Python创build一个超简单的虚拟input/输出板。 我已经得到了下面的代码,我的要求之一,我将存储数据的服务器:

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

没有什么特别的。 我遇到的问题是,根据我如何阅读文档,这应该执行一个Post Request,因为我提供了数据参数,这不会发生。 我有这个代码在该url的索引:

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

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

– 编辑 –

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

 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库不提供数据参数时发布 – 对我来说文档表明它应该。

 u = urllib2.urlopen('http://myserver/inout-tracker', data) h.request('POST', '/inout-tracker/index.php', data, headers) 

使用path/inout-tracker没有拖尾/不抓取index.php 。 相反,服务器将发出一个302redirect到尾随/的版本。

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