问下大家laravel 如何发起一个http请求,里面body是raw json格式数据是{},这样的

情况是这样的我不知道,传raw,json格式空的json怎么写法的?
我用postman是可以获取到数据的,但用代码不知怎么写了?
头信息是这个

问下大家laravel 如何发起一个http请求,里面body是raw json格式数据是{},这样的

问下大家laravel 如何发起一个http请求,里面body是raw json格式数据是{},这样的
用postman是获取到数据了。

然后我写的代码是

问下大家laravel 如何发起一个http请求,里面body是raw json格式数据是{},这样的

然后我返回就显示签名错误

问下大家laravel 如何发起一个http请求,里面body是raw json格式数据是{},这样的

我想问下那个 raw json 的{} 如何传过去的?
验签示例是这样的

在线验签地址
cloud9-package.oss-cn-beijing.aliyuncs.com/hongtusignutil.html

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

Http::withHeaders($request_header)->withOptions(["verify"=>false]) ->timeout(3) ->withBody('{}', 'json') //加一个这个就可以了 ->post('http://192.8.1.31/v1/api/pubsub/busi/record/query')->body();

2个月前 评论
讨论数量: 14

验签的逻辑是怎么样的? json这样传没毛病啊

2个月前 评论
donggan (楼主) 2个月前
donggan (楼主) 2个月前

伪代码如下:

if (empty($body)){
    $body=json_encode(new stdClass());
}
2个月前 评论
donggan (楼主) 2个月前
donggan (楼主) 2个月前
justmd5 (作者) 2个月前
donggan (楼主) 2个月前

验签端读一下内容不就知道了

2个月前 评论
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://xxx.com/', [
    'json' => new \stdClass()
]);
echo $response->getBody();
2个月前 评论

看了一下相关代码,你应该是用的 Laravel 8.x 以前的版本,8.x 及以前的版本中,post 方法的签名限制了第二个参数必须为数组, 9.x 和 10.x 的 post 方法签名都没有限制,而是写在了注释上面(还是限定 array),但是不会报错。

上面这个 PR 准备为 8.x 添加这个修改,因为其会造成兼容性破环,所以放到了 9.x 中。

    public function post(string $url, $data = [])
    {
        return $this->send('POST', $url, [
            $this->bodyFormat => $data,
        ]);
    }

这是 9.x 版本中的代码,能看到 post 只是一个“语法糖”,换句话说,你可以把 post 改为 send 方法调用就好了。

...->send('POST', $url, ['json' => (object)[]]);

这样应该就可以了

2个月前 评论

上面写了JSON字符串一律不能带格式和任何空格,防止与服务端不一致

如果是获取对方数据来验签就使用$request->getContent(),

如果是发送数据给对方来验签,那就使用withBody()方法

$response = Http::withBody(json_encode(["name" => 'xx']))->post('http://example.com/photo');
2个月前 评论

签名的生成与所传输的数据是有关系的,你代码里,传的空数组,就不能用旧的签名了啊,你先把签名的方法搞出来,然后根据签名规则和所传参数再搞请求才对

2个月前 评论

Http::withHeaders($request_header)->withOptions(["verify"=>false]) ->timeout(3) ->withBody('{}', 'json') //加一个这个就可以了 ->post('http://192.8.1.31/v1/api/pubsub/busi/record/query')->body();

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!