При вызове API произошла ошибка парсинга тела - PullRequest
2 голосов
/ 03 августа 2020

Я работаю над проектом OCR и пытаюсь его использовать с помощью vidado API. когда я отправляю почтовый запрос через posman, он дает мне правильный ответ, но когда я вызываю API из php, он дает мне ошибку ниже

Client error: `POST https://api.vidado.ai/read/text` resulted in a `400 Bad Request` response: {"detail":"There was an error parsing the body"}

мой код

$client = new \GuzzleHttp\Client();
                $url   = "https://api.vidado.ai/read/text";

                $requestAPI = $client->post( $url, [
                    'headers' => [
                        'Accept' => 'application/json',
                        'Authorization' => 'my apikey',
                        'Content-Type' => 'multipart/form-data'
                    ],
                    'form_params' => [
                        'autoscale' => 'true',
                        'image'=> $img
                    ],
                ]);

в почтальоне мой запрос выглядит следующим образом request header тело запроса

кто-нибудь заметил реальную ошибку? поэтому, пожалуйста, дайте мне способ сделать это. Спасибо.

1 Ответ

1 голос
/ 03 августа 2020

Согласно документации Guzzle

Примечание

multipart не может использоваться с опцией form_params. Вам нужно будет использовать то или другое. Используйте form_params для запросов application / x- www-form-urlencoded и multipart для запросов multipart / form-data.

Этот параметр нельзя использовать с body, form_params или json

Таким образом, вы не можете использовать form_params с multipart / form-data, и вы должны использовать подход multipart следующим образом:

$client = new \GuzzleHttp\Client();
$url   = "https://api.vidado.ai/read/text";

$requestAPI = $client->request('POST', $url, [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'my apikey',
        'Content-Type' => 'multipart/form-data'
    ],
    'multipart' => [
        [
            'name'     => 'image',
            'contents' => fopen('/path/to/file', 'r'),
            'filename' => 'custom_filename.jpg'
        ],
        [
            'name' => 'autoscale',
            'contents'=> true
        ]
    ]
]);
...