Jonny Barnes
Jonny Barnes

Reputation: 535

How do I make this POST request with Guzzle6

My working Guzzle5 code looks roughly as follows:

$guzzle = new \GuzzleHttp\Client();
$request = $guzzle->createRequest('POST', $url);
$request->setHeader('Authorization', 'Bearer ' . $token);
$postBody = $request->getBody();
$postBody->setField('name', 'content');//several times
if (check for file) {
    $postBody->addFile(new \GuzzleHttp\Post\PostFile('name', fopen(...));
}
$response = $guzzle->send($request);

What with setting a header and maybe adding a file, I’m not sure how to do this with Guzzle6.

Upvotes: 0

Views: 1091

Answers (2)

max_spy
max_spy

Reputation: 664

Here an example from the official documentation how can you set headers and adding file into your POST request with Guzzle 6:

$client = new \GuzzleHttp\Client();
$client->post('/post', [
    'multipart' => [
        [
            'name'     => 'foo',
            'contents' => 'data',
            'headers'  => ['X-Baz' => 'bar']
        ],
        [
            'name'     => 'baz',
            'contents' => fopen('/path/to/file', 'r')
        ],
        [
            'name'     => 'qux',
            'contents' => fopen('/path/to/file', 'r'),
            'filename' => 'custom_filename.txt'
        ],
    ]
]);

The multipart option sets the body of the request to a multipart/form-data form, if you don't need to work with files you can just use form_params instead of multipart option.

Any headers you can easy set with help headers option.

Additional info you can find here Guzzle Upgrade Guide (5.0 to 6.0)

Upvotes: 1

JasonJensenDev
JasonJensenDev

Reputation: 2407

Here is some code copied from one of my projects:

$client = new GuzzleHttp\Client();
$url = 'someurl.com/api';
$body = json_encode([
    'variable1' => 'this',
    'variable2' => 'that'
]);


$response = $client->post($url, [
    'headers' => [
        'header_variable1' => 'foo',
        'header_variable2' => 'bar'
    ],
    'json' => true,
    'timeout' => 3,
    'body' => $body
]);

$data = $response->json();

Upvotes: 0

Related Questions