Laravel框架下使用Guzzle Http客户端发POST请求丢失Id属性问题求助
你的问题根源是混淆了原生Guzzle客户端和Laravel封装的Http门面的传参规则:
- 原生Guzzle的
post方法第二个参数需要传入包含json键的配置数组,才能自动序列化JSON - 但Laravel的Http门面做了封装,
post方法的第二个参数直接接收要序列化的JSON数据数组,不需要额外套json键。你当前的写法实际发送的请求体是{"json":{"Id":"4"}},服务器自然找不到顶层的Id属性。
方案1:使用Laravel Http门面的标准写法(推荐)
直接把数据数组传给post方法的第二个参数即可,Laravel会自动完成JSON序列化、设置对应的请求头:
$url = "https://blablabla.com/api"; $key = "1234"; $data = [ 'Id' => "4" ]; $response = Http::withHeaders([ "Authorization" => $key ])->post($url, $data);
方案2:兼容原生Guzzle配置的写法
如果你需要保留原生Guzzle的配置传递方式,可以通过withOptions方法传入json参数:
$url = "https://blablabla.com/api"; $key = "1234"; $data = [ 'Id' => "4" ]; $response = Http::withHeaders([ "Authorization" => $key ])->withOptions([ 'json' => $data ])->post($url);
调试建议
后续遇到类似请求参数问题,可以在发送请求前链式调用->dump()方法,Laravel会打印完整的请求信息,方便快速排查参数格式问题。
内容的提问来源于stack exchange,提问作者The Stompiest
相关产品推荐
相关产品推荐

