You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9:HTTP Client替代cURL请求返回异常结果求助

问题排查与修复

你遇到的问题有两个核心原因,逐一解决即可:

1. 错误直接输出Response对象

Laravel HTTP Client发起请求后返回的是Illuminate\Http\Client\Response实例,而非直接的响应内容。你看到的{"cookies": {}, "transferStats": {}}是Response对象的默认输出,并非目标端点返回的真实内容。

要获取实际响应内容,需要调用对应方法:

  • 获取JSON格式响应:$scammer_check->json()
  • 获取原始字符串响应:$scammer_check->body()
  • 检查响应状态码:$scammer_check->status()

2. 请求编码格式与cURL不一致

你的原cURL代码中,CURLOPT_POSTFIELDS传入数组时,cURL会自动以multipart/form-data格式发送请求;而你用HTTP Client的两种写法,分别默认发送application/x-www-form-urlencoded和application/json格式,与目标服务器预期的格式不匹配。

修复请求格式,让HTTP Client和cURL行为保持一致:

// 模拟cURL的multipart/form-data格式请求
$scammer_check = Http::asMultipart()
    ->post(env('SCAMMER_CHECK_ENDPOINT'), [
        'auth' => $data['auth'],
        'authUserId' => $msd_user_id,
        'img' => $data['base64img']
    ]);

// 获取实际响应内容
$responseContent = $scammer_check->json();

如果目标服务器实际接受application/x-www-form-urlencoded格式(部分场景下cURL数组也会自动适配),也可以用asForm()方法:

$scammer_check = Http::asForm()
    ->post(env('SCAMMER_CHECK_ENDPOINT'), [
        'auth' => $data['auth'],
        'authUserId' => $msd_user_id,
        'img' => $data['base64img']
    ]);

验证建议

可以通过$scammer_check->headers()查看响应头,确认服务器返回的内容类型;也可以开启HTTP Client的日志功能,对比cURL和HTTP Client的请求头、请求体差异:

// 开启请求日志,输出详细请求信息
$scammer_check = Http::withOptions(['debug' => true])
    ->asMultipart()
    ->post(env('SCAMMER_CHECK_ENDPOINT'), [
        'auth' => $data['auth'],
        'authUserId' => $msd_user_id,
        'img' => $data['base64img']
    ]);

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:25:30