使用Python的POST请求的json数据没有到达

时间:2014-02-04 22:58:10

标签: php python json post httprequest

我喜欢构建一个小型REST接口来连接PYTHON和PHP。 经过几个小时的谷歌后,我几乎从几个讨论区复制并粘贴了代码:

import requests
import json

url = 'http://spidercontrol.ilumiweb.local/helge/voltage'

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
data = {'value': '7.4', 'decay_time': '300'}

r = requests.post(url, data=json.dumps(data), headers=headers)

这应该通过POST将数据作为json发送到给定的url。这是发送到的地方:

<?php

  echo "Method: \t".$_SERVER['REQUEST_METHOD']."\r\n";
  print_r(getallheaders());
  echo "Post:";
  print_r($_POST);
  echo "Get:";
  print_r($_GET);
  exit;
?>

但$ _POST数据中没有任何内容:

Method:         POST
Array
(
    [Host] => spidercontrol.ilumiweb.local
    [Content-Length] => 37
    [Content-type] => application/json
    [Accept-Encoding] => gzip, deflate, compress
    [Accept] => text/plain
    [User-Agent] => python-requests/2.2.1 CPython/2.7.6 Windows/7
)
Post:Array
(
)
Get:Array
(
)

如果我使用相同的代码,但删除headers = headers信息但data = data它运行良好。有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

在PHP $_POST中只包含表单数据(application/x-www-form-urlencodedmultipart/form-data编码的POST正文。)

要获取JSON数据,您需要使用php://input直接阅读请求正文:

$json = json_decode(file_get_contents("php://input"));