Guzzle Post с использованием ключа API продолжает приводить к 400 неверным запросам

Я использую Guzzle версии 6.3, и у меня возникли проблемы с моим запросом. Я продолжаю получать ошибку 400 Bad Request, и я не уверен, что это лучший способ отладки или что может быть причиной ошибки. Когда я устанавливаю это с помощью Postman и тех же критериев, все работает правильно.

$client = new GuzzleHttp\Client();
$body = $this->actionGenerateMessage();

try {
    $response = $client->post('the/endpoint',
        array(
            'body' => $body,
            'headers' => array(
                'apikey' => 'apikeyhere',
             )
        )
    );
} catch (RequestException $e) {
    var_dump($e->getResponse()->getBody()->getContent());
}

person user469626    schedule 19.08.2018    source источник
comment
Вы убедились, что он работает с использованием более простых средств, таких как curl из вашей оболочки или даже с помощью приложения для разработки REST, такого как Postman?   -  person cnizzardini    schedule 20.08.2018
comment
Да. Я использовал Postman для тестирования ранее, и все работает. Теперь пытаюсь внедрить в свое приложение и получаю ответ 400 Bad Request.   -  person user469626    schedule 20.08.2018
comment
Затем вам нужно выяснить, как продублировать то, что вы сделали в почтальоне. Использует ли он базовую аутентификацию? Какая-то авторизация дайджеста заголовка? Каковы требования аутентификации API. Вам необходимо предоставить дополнительную информацию, если вы надеетесь получить помощь.   -  person cnizzardini    schedule 20.08.2018
comment
Я дублирую это из того, что я могу сказать. Он использует конечную точку Apigee, которая подключается к Amazon Active MQ. Конечная точка Apigee настроена так, что мне нужно только отправить ключ API как часть заголовка, а затем сообщение. Поэтому я не уверен, правильно ли он отправляет информацию, а сервер возвращает неверный запрос или мои настройки Guzzle не подходят для этого типа запроса.   -  person user469626    schedule 20.08.2018
comment
Ошибка 400 возникает из-за ошибок в синтаксисе HTTP-запроса. Соответствует ли ваше тело типу контента? отредактировать ниндзя от OP :)   -  person Loek    schedule 20.08.2018


Ответы (1)


Я смог заставить это работать. Похоже, что установка ActiveMQ ожидала сообщения JSON, когда я пытался отправить сообщение XML.

Я смог определить это, включив флаг отладки Guzzle.

$client = new GuzzleHttp\Client([
    'debug'           => true
]);

Затем добавьте тип содержимого в заголовки.

'headers' => array(
    'apikey' => 'apikeyhere',
    'Content-Type' => 'application/xml',
)

Надеюсь, это поможет кому-то в подобной лодке.

person user469626    schedule 20.08.2018