【发布时间】:2012-10-27 06:33:30
【问题描述】:
我的项目范围是将某些值从 python 脚本传递到远程 php 脚本。
我有一个生成关联数组的 python 脚本。例如(已经 JSON 编码):
{"FRONT": "19.50", "RACK": "17.63", "REAR": "21.06", "ROOM": "15.6"}
我需要将此关联数组传递给我遵循本教程的远程 PHP 脚本: http://nonstopblah.wordpress.com/2010/07/13/python-to-php-via-json/
我得到 200 的 HTTP 响应,但在 php 脚本中 POST 变量似乎为空
这是我的代码:
bulkData = json.dumps(temp, ensure_ascii = 'False')
# ensure_ascii is false as data is in unicode and not ascii encoding , use this if data is in any other encoding
print bulkData
print '\nHTTP Response'
headers = { "charset":"utf-8",
"Accept": "text/plain"}
conn = httplib.HTTPConnection(report_host)
postData = urllib.urlencode({'results':bulkData})
conn.request("POST", report_path, postData,headers)
response = conn.getresponse()
text = response.read()
print "Response status: ",response.status,"\n",text
conn.close()
这是 PHP 脚本:
if( isset($_POST['results']) )
{
$data = json_decode($_POST['results']);
print_r($data);
}
else
{
echo 'Nothing to listen.';
print_r($_POST);
}
这是我的 python 脚本的输出(带有远程响应):
{"FRONT": "20.44", "RACK": "18.88", "REAR": "21.25", "ROOM": "17.7"}
HTTP Response
Response status: 200
Nothing to listen.Array
(
)
有更聪明的方法吗?我在这里错过了什么?
提前感谢您的友好回答。
【问题讨论】:
-
您是否尝试过记录 PHP 脚本收到的
Content-Type?您正在发送“application/x-www-form-urlencoded”数据,如果它以“text/plain”的形式到达,它可能无法正常工作。 (但实际上,为什么你首先要对数据进行 URL 编码?为什么不直接发送“application/json”并将 JSON 作为 POST 数据发送?) -
PS,你为什么一开始就用不同的语言来写前端和后端?这意味着有两倍的东西要学,两倍的东西可能会莫名其妙地出错。为什么不也用 Python 编写服务(或者,如果你真的必须用 PHP 编写客户端)?
-
PPS,看了你链接的博文,好像作者对网络服务的理解不如你,所以我建议寻找更好的教程。
-
@abarnert 我对 PHP 非常熟悉(监听器只是一个测试 :))但对 python 不太熟悉。我想说你通常是对的,匹配语言是一个好主意,但在这种情况下它不是。 python 脚本从 XML 中的温度探测器读取数据(这是一个计划任务),然后将其发布回 php 脚本?为什么这不能直接从 php 脚本完成?因为这个在基础设施之外的远程服务器上,没有不能带进去。 PS。在你问 SNMP 之前(安全不是我的问题:P)不是一个选项
-
如果你对 PHP 比较了解……你能写一个命令行 PHP 脚本而不是 Python,还是远程机器没有安装命令行 PHP?
标签: php python json post http-post