php - 将 JSON 传递给 PHP 不起作用

标签 php python mysql json

我一直在尝试让我的Python代码将SQL查询数据从运行Python的客户端传输到运行PHP的Web服务器,然后将该数据输入到MySQL数据库中。

下面是模拟单行的python测试代码:

    #!/usr/bin/python

import requests
import json


url = 'http://192.168.240.182/insert_from_json.php'
payload = {"device":"gabriel","data_type":"data","zone":1,"sample":5,"count":0,"time_stamp":"00:00"}
headers = {'content-type': 'application/json'}

response = requests.post(url, data=dict(payload=json.dumps(payload)), headers=headers)
print response

以下是服务器端的PHP脚本:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "practice";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connection made...";

$payload_dump = $_POST['payload']
//$payload = '{"device":"gabriel","data_type":"data","zone":1,"sample":4,"count":0,"time_stamp":"00:00"}';

$payload_array = json_decode($payload_dump,true);

//get the data_payload details
$device = $payload_array['device'];
$type = $payload_array['data_type'];
$zone = $payload_array['zone'];
$sample = $payload_array['sample'];
$count = $payload_array['count'];
$time = $payload_array['time_stamp'];

$sql = "INSERT INTO data(device, data_type, zone, sample, count, time_stamp) VALUES('$device', '$type', '$zone', '$sample', '$count', '$time')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}


$conn->close();
?>

如果我注释掉 $payload_dump 并使用 $payload 并运行脚本,则行将正确添加。但是,当我在客户端上调用 python 脚本时,我得到“响应 200”,但未添加记录。我在 python 中的 JSON 字符串格式不正确,或者我没有正确传递值。

1) python 代码的语法/过程是什么,可以让我看到 PHP 代码实际接收到的内容。 (即将“$payload_dump”变量内容转换为字符串并发送回Python脚本?

2)如何解析上述代码?

最佳答案

您的第一个问题是使用 json header ,您不应该使用该 header ,因为您没有发送原始 json:

您的数据看起来像

{payload = {'key1': 'value1',
            'key2': 'value2' }
         }

原始 json 数据应采用以下形式:

{'key1': 'value1', 
 'key2': 'value2'}

因此您需要从请求中删除 header

response = requests.post(url, data=dict(payload=json.dumps(payload)))

其次,您需要修复丢失的分号

$payload_dump = $_POST['payload']

$payload_dump = $_POST['payload'];

更好的解决方案

可以直接使用requests发送json数据

response = requests.post(url, json=payload)

然后在 php 中获取它

$payload_array = json_decode(file_get_contents('php://input'), true);

关于php - 将 JSON 传递给 PHP 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864218/

相关文章:

python - 使用 Python 更改网格厚度的极坐标图

python - PyInstaller .exe 文件不工作

mysql - 将 odbcReader 分配给数据集

javascript - 使用 CryptoJs 加密并使用 Phalcon 解密

php - 拉拉维尔 : Install Microsoft Azure Client Library with composer

php - 如何使用 SQL 或 PHP 从 mySQL 导出它?

Python 类中的变量列表

mysql - Wordpress:使用类别 slug 使用 mysql 查询获取类别 ID

mysql - 不同条件的额外列

php - 从与第一条记录匹配的表中选择第二条记录