2013-07-20 52 views
12
$baseUrl = 'http://foo'; 
$config = array(); 
$client = new Guzzle\Http\Client($baseUrl, $config); 

什麼是新的方式來設置Guzzle的默認標題,而不是作爲每個$client->post($uri, $headers)作爲參數傳遞?如何在Guzzle中設置默認標題?

$client->setDefaultHeaders($headers)但它已被棄用。

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

回答

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')); 

在這裏看到:

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

+0

我怎麼做同樣的基本認證的用戶名和傳遞? – Zhianc

+3

在Guzzle 6中,您只能在客戶端實例化中設置默認選項。如果您必須使用現有的實例,則無法再對其進行配置。請參閱[什麼替換客戶端 - > setDefaultOption?](https://github.com/guzzle/guzzle/issues/1419)。 「哦,嘿,讓事情變得不那麼靈活,只是因爲,看起來很多[Enterprise](https://github.com/EnterpriseQualityCoding/FizzBu​​zzEnterpriseEdition)」。嘆。 –

2

正確,老方法已被標記爲@deprecated。以下是爲客戶端上的多個請求設置默認標頭的新建議方法。

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

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

如果您正在使用狂飲V = 6.0。*

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

read the doc,也有更多的選擇。

+0

根據文檔標題是請求選項,而不是客戶端選項。都可以互換嗎? – andig

+0

您可以在客戶端實例中設置它,但使用鍵'headers'=> [...](如上所示)。沒有測試它,但假設可以改變... – tasmaniski

+1

有誰知道如何在客戶端實例化後添加默認標頭? –

0

這個,如果你正在使用Drupal做的工作對我來說:

$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);