2013-07-20 8 views
12

Was ist die neue Möglichkeit, die Standard-Header für Guzzle zu setzen, ohne es als Parameter auf jeder $client->post($uri, $headers) übergeben?Wie Standard-Header in Guzzle festlegen?

Es gibt $client->setDefaultHeaders($headers), aber es ist veraltet.

setDefaultHeaders is deprecated. Use the request.options array to specify default request options 

Antwort

13
$client = new Guzzle\Http\Client(); 

// Set a single header using path syntax 
$client->setDefaultOption('headers/X-Foo', 'Bar'); 

// Set all headers 
$client->setDefaultOption('headers', array('X-Foo' => 'Bar')); 

Siehe hier:

http://docs.guzzlephp.org/en/latest/http-client/client.html#request-options

+0

wie mache ich das gleiche für Basic Auth Benutzername und übergeben? – Zhianc

+3

In Guzzle 6 können Sie nur Standardoptionen bei der Client-Instanziierung festlegen. Wenn Sie mit einer vorhandenen Instanz arbeiten mussten, können Sie sie nicht mehr konfigurieren. Siehe [Was ersetzt Client-> setDefaultOption?] (Https://github.com/guzzle/guzzle/issues/1419). "Oh hey, lassen Sie uns die Dinge weniger flexibel machen, nur weil. Wir werden viel [Enterprise] (https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition) sehen". Seufzer. –

2

Richtig, die alte Methode markiert wurde als @deprecated. Hier ist die neue vorgeschlagene Methode zum Festlegen von Standard-Headern für mehrere Anforderungen auf dem Client.

// enter base url if needed 
$url = ""; 
$headers = array('X-Foo' => 'Bar'); 

$client = new Guzzle\Http\Client($url, array(
    "request.options" => array(
     "headers" => $headers 
    ) 
)); 
17

Wenn Sie Guzzle v verwenden = 6.0. *

$client = new GuzzleHttp\Client(['headers' => ['X-Foo' => 'Bar']]); 

read the doc gibt es weitere Optionen.

+0

Entsprechend den Docs-Kopfzeilen sind Anfrageoptionen, nicht Client-Optionen. Sind beide austauschbar? – andig

+0

Sie setzen es in Client-Instanz, aber mit Schlüssel 'Kopfzeilen' => [...] (wie Sie oben sehen können). Habe es nicht getestet, aber angenommen, dass das geändert werden kann ... – tasmaniski

+1

Kann jemand einen Standard-Header hinzufügen, nachdem der Client instanziiert wurde? –

0

das für mich funktioniert, wenn Sie es mit Drupal zu tun sind:

$url="https://jsonplaceholder.typicode.com/posts"; 
    $client = \Drupal::httpClient(); 
    $post_data = $form_state->cleanValues()->getValues(); 
    $response = $client->request('POST', $url, [ 
    'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'], 
    'form_params' => $post_data, 
    'verify'=>false, 
    ]); 
    $body = $response->getBody()->getContents(); 
    $status = $response->getStatusCode(); 
    dsm($body); 
    dsm($status);