沫延说
沫延说

记接口调用报Required request body is missing错误的解决过程

一杯茶一盒烟一个BUG调一天

今天调用了一个行业内的接口通过POST提报数据,无奈非研发人员,只好使用”世界上最好的编程语言”PHP去实现了

接口文档要求请求头为“Content-type:application/json;charset=utf-8”,于是乎使用了PHP的file_get_contents函数去实现

功能实现如下:

function Send_Post_PHP($url, $post_data) {
   
    $options = array(
        'http' => array(
            'method' => 'POST',
            'header' => 'Content-type:application/json;charset=utf-8',
            'content' => http_build_query($post_data),
            'timeout' => 15 * 60
        ),
        'ssl' => array(
            //验证ssl证书
            'verify_peer'=>false,
            'verify_peer_name'=>false,
        )
    );
    
    $result = file_get_contents($url, false, stream_context_create($options));

    return $result;
}

根据开发文档对接接口提报后,报错信息为“Required request body is missing”,故以报错信息为关键词查询发现CSDN中有篇文章《Required request body is missing 错误的解决》中提到:

“我的请求体是使用 @RequestParam 拼接出来的,而 @RequestParam 一般是用于处理Content-Type = application/x-www-form-urlencoded的请求。真正需要的是Content-Type = application/json 格式,所以换用 @RequestBody 问题就解决了”

看到这句话恍然大悟,虽然php会自动对json进行编码,而其他语言实现的接口,不一定支持自动编码,于是我想,如果PHP直接对json进行编码后再进行发送,岂不是无需接口进行编码了?

于是对数组进行了一些改动,将

'content' => http_build_query($post_data),

改为

'content'   =>  json_encode($post_data),

终于见到了久违的{“msg”:”success”,”code”:0}

 

没有标签
首页      生产环境      PHP      记接口调用报Required request body is missing错误的解决过程

Morton.L

文章作者

发表回复

textsms
account_circle
email

沫延说

记接口调用报Required request body is missing错误的解决过程
一杯茶一盒烟一个BUG调一天 今天调用了一个行业内的接口通过POST提报数据,无奈非研发人员,只好使用"世界上最好的编程语言"PHP去实现了 接口文档要求请求头为“Content-type:applic…
扫描二维码继续阅读
2022-04-29