PHP发送/接收JSON请求

2021/7/27 11:06:03

本文主要是介绍PHP发送/接收JSON请求,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

现在API模式,经常使用headers里传JSON数据,作为POST请求传递参数的方式,在参数量较多时POST JSON要比POST FormData便于开发和测试

PHP发送JSON POST

$url = "http://example.com/request/post/json";    
$data = json_encode(["foo" => "bar"]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_exec($curl);
curl_close($curl);

或者

/**
 * PHP发送Json对象数据
  * 例子 list($returnCode, $returnContent) = http_post_json($url, $jsonStr);
 * @param $url 请求url
 * @param $jsonStr 发送的json字符串
 * @return array
 */
function http_post_json($url, $jsonStr)
{

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Content-Length: ' . strlen($jsonStr)
        )
    );

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return array($httpCode, $response);

}

PHP接受JSON POST

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

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 

$GLOBALS['HTTP_RAW_POST_DATA']

,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 

$GLOBALS['HTTP_RAW_POST_DATA']

默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。

在 PHP 5.6 之前 php://input 打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI 的实现,请求体数据被保存的时候, 它可以打开另一个 php://input 数据流并重新读取。 通常情况下,这种情况只是针对 POST 请求,而不是其他请求方式,比如 PUT 或者 PROPFIND。



这篇关于PHP发送/接收JSON请求的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程