使用Python发送POST请求的正确方法(urllib2,base64和json)

时间:2013-01-21 10:38:16

标签: python json post base64 urllib2

我需要发送数以千计的POST请求。 我在网上搜索信息,经过多次尝试我编码 以下解决方案:

post_data = urllib.urlencode({'pushes': b64encode(json.dumps(pushes))})
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent,
            'Content-type': "application/x-www-form-urlencoded",
            'Accept': "text/plain"}
request = urllib2.Request(PUSH_URL, data=post_data, headers=headers)
response = urllib2.urlopen(request).read()

推送是一个词典列表。

大多数情况下,此解决方案可以正常工作,但有时会导致目标服务器(Apache)出现分段错误。我监视了目标服务器上打开的连接。 连接数很少(100-200)。 也许我的代码不是100%正确。 我需要一个更可靠的解决方案。

提前致谢。

更新 - 2013年1月25日
我使用strace来调试apache web服务器(目标服务器) 我发现系统调用有一些问题' gettimeofday'这是Zend框架使用的 我试图将zend应用程序移动到两个不同的服务器中, Centos和Ubuntu Server 12.04。
PHP版本也从5.3改为5.4 我总是遇到同样的问题。

我将应用程序移植到另一个框架。问题消失了 执行POST请求的源服务器上的代码未被修改。

1 个答案:

答案 0 :(得分:1)

如果您在Apache上有段错误,为什么您认为问题与您的代码有关?我要做的是仔细研究Apache发生的事情,当它死亡时 - 打开调试记录,strace / ktrace它的进程,最后测试是否在使用其他http服务器时发生同样的情况,如Nginx或Lighttpd。 在不知道为什么Apache会死的情况下,您无法在代码中尝试修复它(即使正确的解决方案是修复Apache)。