2015-06-15 10 views
6

Po uruchomieniu następującego kodu (przy użyciu najnowszego Guzzle, wersja 6), żądany adres URL to http://example.com/foobar?foo=bar, z którego usunięto boo=far z żądania.Jak połączyć domyślne parametry ciągu zapytania i parametry specyficzne dla żądania za pomocą polecenia Guzzle?

$guzzle_http_client = new GuzzleHttp\Client([ 
    'base_uri' => 'http://example.com/', 
    'query' => [ 
     'foo' => 'bar' 
    ], 
]); 

$request = new \GuzzleHttp\Psr7\Request('GET', 'foobar?boo=far'); 
$response = $guzzle_http_client->send($request); 

Kiedy uruchomić poniższy kod, przechodząc boo=far zamiast w ramach metody Client::send(), adres URL, który pobiera wymagane jest http://example.com/foobar?boo=far

$guzzle_http_client = new GuzzleHttp\Client([ 
    'base_uri' => 'http://example.com/', 
    'query' => [ 
     'foo' => 'bar' 
    ], 
]); 

$request = new \GuzzleHttp\Psr7\Request('GET', 'foobar'); 
$response = $guzzle_http_client->send($request, ['query' => ['boo' => 'far']]); 

Oczywiście, adres URL, że chcę być wymagane jest :

http://example.com/foobar?foo=bar&bar=foo 

W jaki sposób ustawić Guzzle w połączeniu parametrów domyślnych parametrów zapytania klienta z parametrami specyficznymi dla żądania?

+0

to jest prawdziwy ból! Stworzyłem obiekt PSR7 \ Uri metodą statyczną 'withQueryValue' i przekazałem go do konstruktora. Ale to też nie działało! –

Odpowiedz

6

Można spróbować dostać domyślnych opcji „zapytań” przy użyciu metody „getConfig”, a następnie połączyć je z nowymi opcjami „zapytań”, oto przykład:

$client = new GuzzleHttp\Client([ 
    'base_uri' => 'http://example.com/', 
    'query' => ['foo' => 'bar'] 
]); 

a następnie można łatwo wysłać żądanie GET :

$client->get('foobar', [ 
    'query' => array_merge(
     $client->getConfig('query'), 
     ['bar' => 'foo'] 
    ) 
]); 

Dodatkowe informacje można znaleźć tutaj Request Options

Powiązane problemy