Как добавить данные формы для запросов Post для HTTP-клиента Buzz на Laravel?

я использую Базз HTTP-клиент для Laravel.

У меня проблема с добавлением данных формы в мои запросы POST, так как они не были указаны в вики / документации.

Ниже перечислены два способа отправки запросов.

Пример 1:

$response = Buzz::post('http://api.website.com/login');
//how do I add a "username", and "password" field in my POST request?
echo $response;
echo $response->getContent;

Пример 2:

$request = new Buzz\Message\Request('POST', '/', 'http://google.com');
$response = new Buzz\Message\Response();
//how do I add a "username", and "password" field in my POST request?
$client = new Buzz\Client\FileGetContents();
$client->send($request, $response);

echo $request;
echo $response;

0

Решение

Ответ здесь будет зависеть от того, что ожидает API. Предположим, API ожидает пароль и имя пользователя, отправленные в виде JSON в содержании запроса. Пример http-запроса будет выглядеть примерно так:

POST /login HTTP/1.1
Content-Type: application/json

{
"username": "bugsBunny",
"password": "wh4tsUpD0c"}

Чтобы сделать это с Buzz, это должно работать:

$jsonPayload = json_encode([
‘username’ => ‘bugsBunny’,
‘password’ => ‘wh4tsUpD0c
]);

$headers = ['Content-Type', 'application/json'];

$response = Buzz::post('http://api.website.com/login', $headers, $jsonPayload);

Если вы пытаетесь отправить форму на определенный веб-сайт, вам не следует использовать вышеуказанный метод. Вместо этого используйте встроенный метод формы Buzz, который прикрепит правильные заголовки.

use Buzz\Message\Form;
$request = new Form(Form::METHOD_POST, ‘login’, ‘api.website.com’);
$request->setFields([
‘username’ => ‘bugsBunny’,
‘password’ => ‘wh4tsUpD0c’
]);

$response = new Buzz\Message\Response();

$client = new Buzz\Client\Curl();
$client->send($request, $response);

Кстати, я бы предложил не использовать эту библиотеку. Библиотека, как вы сказали, является интеграцией Laravel для Buzz. Проблема здесь в том, что автор должен был сделать Buzz зависимостью, указанной в composer, а не включать источник Buzz напрямую. Это предотвращает попадание обновлений в Buzz в этот проект. Вы можете увидеть на актуальном Базо репо, последний коммит был 29 дней назад. Также, если другой пакет использует Buzz и правильно его включает composer, composer установит оба пакета. Но когда был создан экземпляр Buzz, вы не могли быть уверены, какая версия загружалась. Вы должны просто использовать Buzz, который можно найти на packagist.

// assuming $headers and $jsonPayload are the same as in previous example.
$browser = new Buzz\Browser();
$response = $browser->post('http://api.website.com/login', $headers, $jsonPayload);
3

Другие решения

С моей стороны было глупо не читать код, прежде чем спрашивать.

Данные формы фактически помещаются в третий параметр функции. Хотя он принимает только строки, поэтому не забудьте json кодировать ваши данные.

Buzz Class

public function post($url, $headers = array(), $content = '')
{
....
....
}

Buzz::post($url, array(), json_encode(array('Username'=>'usernamexx','Password'=>'p@$$w0rD')) );
0

По вопросам рекламы [email protected]