在 PHP 中发送 POST 请求并获取 JSON 响应?

Posted

技术标签:

【中文标题】在 PHP 中发送 POST 请求并获取 JSON 响应?【英文标题】:Send POST Request & Get JSON Response in PHP? 【发布时间】:2019-02-23 23:59:43 【问题描述】:

我正在尝试发送POST request via php from AJAX。我用Postman 检查了API。它工作正常。但它没有在 PHP 中执行。它也没有显示在网络选项卡中。

我在 Stack Overflow 中看到了很多用于发出 POST 请求的示例并进行了尝试。但是我不知道我哪里出错了?

我在这里附上了 JS 代码和 PHP 代码

JavaScript 代码

function editUser(toid, name, mobile, mail, pin, addr, state, dis, subdis, role, user) 

    $.ajax(
        type: "POST",
        url: "edituser.php",
        dataType: 'html',
        data: 
            id: toid,
            fullname: name,
            phone: mobile,
            email: mail,
            address1: addr,
            state: state,
            district: dis,
            subdistrict: subdis,
            pincode: pin,
            usertype: user,
            role: role,
            token: apptoken,
        ,
        success: function (response) 
            visibility(false);
            console.log("Response > > " + response);
            if (response.status == "SUCCESS") 
                swal("Updated User", " Information Updated Successfully!", "success");
            
            loadData();
        
    );

PHP 代码

<?php 

// where are we posting to?
$url = 'http://api.tech.com/api/UpdateUser';

    // what post fields?
    $fields = array(
       'id' => $_POST['id'],
       'fullname' => $_POST['fullname'],
       'phone' => $_POST['phone'],
       'email' => $_POST['email'],
       'address1' => $_POST['address1'],
       'state' => $_POST['state'],
       'district' => $_POST['district'],
       'subdistrict' => $_POST['subdistrict'],
       'pincode' => $_POST['pincode'],
       'usertype' => $_POST['usertype'],
       'role' => $_POST['role'],
    );

    // build the urlencoded data
    $postvars = http_build_query($fields);

    // open connection
    $ch = curl_init();

    $token = $_POST['token'];

    // set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);

        curl_setopt($ch, CURLOPT_HTTPHEADER, array("AppToken: $token", 
"Content-Type: application/x-www-form-urlencoded"));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    // execute post
    $result = curl_exec($ch);

    echo $result;

    // close connection
    curl_close($ch);

?>

更新:

发送到 API ($url) 的请求未显示在“网络”选项卡中。但是显示了对 edituser.php 的请求。

【问题讨论】:

你不能回显数组 echo json_decode($result);,你的意思是 json_encode 吗? 网络选项卡根本不显示发出的请求?控制台有错误吗? 您是否尝试使用 PHP 接收数据?您的 PHP 代码并不表明您是。请澄清 PHP 代码实际上表明...$_POST 是一个全局变量,在收到帖子时填充。 "它没有出现在网络选项卡中" 那么你的 editUser() 函数可能没有被调用。 【参考方案1】:

我觉得这里缺少很多上下文,但我已经做了很多这样的事情,所以我会尽力帮助我理解的内容。

这是我到目前为止从您的问题中收集到的内容。

    您正在 javascript 中调用一个触发给定 PHP 代码的 ajax 函数。 “根据网络截图”,JavaScript 成功调用了此代码。 网络选项卡指示 PHP 脚本不返回任何内容。

这是我对如何前进的想法。

    您似乎正在从客户端 JavaScript 发送所有数据,包括安全 pin 和令牌。这是一个非常糟糕的主意,因为这意味着您的用户都可以看到这个安全密码并出于他们自己的邪恶目的窃取它。而是在 php 代码中存储诸如安全引脚之类的常量。

    如果您希望在网络选项卡中看到 curl 请求,那您就错了。 curl 请求是从服务器到服务器的,客户端永远不会看到。

    如果响应选项卡为空,您可能会遇到简单的语法错误或某种您未捕获的 curl 错误。

将其中的一些添加到您的调试请求中:

$result = curl_exec($request);
$response_code = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo 'Response code: ' . $response_code;

if(curl_error($request))

  echo '<br />Curl error: ' . curl_error($request);

您至少应该在 ajax 调用的“响应”选项卡中看到响应代码。

如果您仍然什么也看不到,请确保您的 PHP configuration 设置为显示所有警告和错误等,并且没有隐藏您需要的信息。

【讨论】:

API 可能对该响应代码有特定的答案,但可以在此处找到通用答案 restapitutorial.com/httpstatuscodes.html。 “415: Unsupported Media” 这可能意味着 curl 请求上的 http 标头需要有一个“Content-Type: xxx”指令。

以上是关于在 PHP 中发送 POST 请求并获取 JSON 响应?的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何通过Post请求发送Json数据

iPhone- 在 POST 中将 JSON 对象发送到 PHP 服务器并从服务器获取响应

php中 curl模拟post发送json并接收json(转)

如何向php服务器发送数据为json的post请求

php接收不到post发送的值(新手问题)

如何防止用户向 php 文件发送如此多的 post 请求