我需要发送数千个 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()
pushes 是一个字典列表。
大多数情况下,此解决方案运行良好,但有时会导致目标服务器 (Apache) 出现分段错误。我已经监视了目标服务器上打开的连接。连接数很少(100-200)。也许我的代码不是 100% 正确的。我需要一个更可靠的解决方案。
提前致谢。
更新 - 2013 年 1 月 25 日
我使用 strace 调试 apache Web 服务器(目标服务器)。
我发现 Zend 框架使用的系统调用“gettimeofday”存在一些问题。
我尝试将 zend 应用程序移动到两个不同的服务器 Centos 和 Ubuntu Server 12.04 中。
PHP 版本也从 5.3 更改为 5.4。
我总是遇到同样的问题。
我将应用程序移植到另一个框架。问题消失了。
未修改执行 POST 请求的源服务器上的代码。