Gnuffo1
Gnuffo1

Reputation: 3546

How do I send parameters for a PUT request in Guzzle 5?

I have this code for sending parameters for a POST request, which works:

$client = new GuzzleHttp\Client();
$request = $client->createRequest('POST', 'http://example.com/test.php');
$body = $request->getBody();

$request->getBody()->replaceFields([
    'name' => 'Bob'
]);

However, when I change POST to PUT, I get this error:

Call to a member function replaceFields() on a non-object

This is because getBody is returning null.

Is it actually correct to send PUT parameters in the body? Or should I do it in the URL?

Upvotes: 9

Views: 25910

Answers (4)

Invincible
Invincible

Reputation: 1460

In Guzzle 6, if you want to pass JSON data to your PUT request then you can achieve it as below:

           $aObj = ['name' => 'sdfsd', 'language' => 'En'];

            $headers = [
                "User-Agent"    => AGENT,
                "Expect"        => "100-continue",
                "api-origin"    => "LTc",
                "Connection"    => "Keep-Alive",
                "accept"        => "application/json",
                "Host"          => "xyz.com",
                "Accept-Encoding"=> " gzip, deflate",
                "Cache-Control"=> "no-cache",
                "verify"        => false,
                "Content-Type" => "application/json"
            ];

          $client = new GuzzleHttp\Client([
            'auth'  => ['testUsername', 'testPassword'],
            'timeout'   => '10000',
            'base_uri'  => YOUR_API_URL,
            'headers' => $headers
        ]);

        $oResponse = $client->request('PUT', '/user/UpdateUser?format=json', ['body' => json_encode( $aObj, JSON_UNESCAPED_SLASHES)]);

        $oUser = json_decode( $oResponse->getBody());

Upvotes: 0

yesnik
yesnik

Reputation: 4695

If you're using Guzzle version 6 you can make PUT request this way:

$client = new \GuzzleHttp\Client();

$response = $client->put('http://example.com/book/1', [
    'query' => [
        'price' => '50',
    ]
]);

print_r($response->getBody()->getContents());

Upvotes: 0

Melih Sevim
Melih Sevim

Reputation: 853

when service ise waiting json raw data

$request = $client->createRequest('PUT', '/yourpath', ['json' => ['key' => 'value']]);

or

$request = $client->createRequest('PUT', '/yourpath', ['body' => ['value']]);

Upvotes: 1

Richard Parnaby-King
Richard Parnaby-King

Reputation: 14862

According to the manual,

The body option is used to control the body of an entity enclosing request (e.g., PUT, POST, PATCH).

The documented method of put'ing is:

$client = new GuzzleHttp\Client();

$client->put('http://httpbin.org', [
    'headers'         => ['X-Foo' => 'Bar'],
    'body'            => [
        'field' => 'abc',
        'other_field' => '123'
    ],
    'allow_redirects' => false,
    'timeout'         => 5
]);

Edit

Based on your comment:

You are missing the third parameter of the createRequest function - an array of key/value pairs making up the post or put data:

$request = $client->createRequest('PUT', '/put', ['body' => ['foo' => 'bar']]);

Upvotes: 20

Related Questions