关于guzzle表单本地文件上传的问题

新手上路,请多包涵

请教各位一个问题。
最近在调试一个第三方的api,然后使用了guzzle做客户端,其中该api的一个请求参数需要使用本地图片的二进制数据,我翻了下guzzle的手册,然后查找了下文档http://guzzle-cn.readthedocs....,按照这上面的试了下,服务端一直提示说我的的请求解析出错,要我检查下content-type and body,试了很久也没解决,希望有熟悉的大神提点下,谢谢了。代码如下

$client  = new Client();
         $instance = sign::getInstance();
         $url = 'http://XXXXX';
         $sign = $instance->getSign();
        
         //hearder头
         $header = ['Host'=>'XXXXXXX','Content-Type'=>'multipart/form-data','Authorization'=>$sign];
         //本地图片
         $file = file_get_contents('D:\wamp64\www\whistles-master\test.jpg');
         //body
         $body = [
               [
                  'name'=>'appid',
                  'contents'=>'XXXX'
               ],
               [
                  'name'=>'bucket',
                  'contents'=>'XXXXX'
               ],
               [
                  'name'=>'type',
                  'contents'=> 0
               ],
               [
                   'name'=>'image',
                   'contents'=>fopen('D:\wamp64\www\whistles-master\test.jpg', 'r')
               ]
              
              
         ];

         $res = $client->request('POST',$url,          ['headers'=>$header,'multipart'=>$body]);

         echo  $res->getBody();

报错信息如下

GuzzleHttp\Exception\ClientException: Client error: `POST http://XXXXX` resulted in a `400 Bad Request` response: {"code":3,"message":"invalid request: parsing error - check content-type and body","data":{}} in D:\XXXXXXXXX\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 113
阅读 12.9k
1 个回答
try {
    $response = $client->request('POST', '/face/detect', [
        'headers' => [
            'authorization' => $signStr,
        ],
        'multipart' => [
            [
                'name' => 'appid',
                'contents' => $appid,
            ],
            [
                'name' => 'mode',
                'contents' => 1,
            ],
            [
                'name' => 'image',
                'contents' => fopen('/home/chenyarong/Pictures/mayun/0.jpg', 'r'),
            ],
        ]
    ]);
} catch (\Exception $ex) {
    var_dump($ex->getMessage());exit;
}

echo $response->getBody();

我最近刚好也在用腾讯的人脸识别,也遇到这个问题,测试过程中,代码好像跟你的没有区别, 少了Host, 少了Content-Type 的设置,guzzle自己应该条件了,然后测试没问题,能够正常的返回.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏