2015-07-31 15 views
5

Próbuję użyć Guzzle zamiast bezpośrednio używać cURL do osiągnięcia i żądania HTTP. Jak zrobić ten sam wniosek, ale z Guzzle? Czy powinienem po prostu trzymać się CURL?Przetłumacz prośbę cURL na Guzzle

$ch = curl_init(); 
// Set the URL 
curl_setopt($ch, CURLOPT_URL, $url); 
// don't verify SSL certificate 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
// Return the contents of the response as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// Follow redirects 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
// Set up authentication 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, "$token:X"); 

Oto jak mam. Występuje błąd 401 Nieautoryzowany. Wiem, że mam poprawne dane uwierzytelniające. Co sprawia, że ​​myślę, że nie jestem na właściwej ścieżce, to dokumenty Guzzle'a stwierdzające: auth jest obecnie obsługiwane tylko podczas korzystania z procedury obsługi cURL, ale planowane jest utworzenie zamiennika, który może być używany z dowolnym programem obsługi HTTP. Ale z mojego zrozumienia Guzzle domyślnie z cURL.

$guzzleData = [ 
    'auth' => [$token, 'X'], 
    'allow_redirects' => true, 
    'verify' => false, 
]; 

$client = new \Guzzle\Http\Client(); 
$request = $client->get($url, $guzzleData); 
$response = $request->send(); 
+0

Prawdopodobnie uzyskasz więcej odpowiedzi na swoje pytanie, gdy będziesz publikować w usłudze Exchange, głosowanie na migrację. – carlcs

+0

Jak wspomniano w @carlcs, to pytanie jest o wiele lepiej dopasowane do Stack Overflow. Choć jest to pomocne dla niektórych twórców pluginów Craft, to naprawdę nie jest to pytanie typu Craft jako takiego. –

+0

Nice! Byłem w stanie głosować dwa razy, raz na Craft SE, a teraz tutaj! :) – carlcs

Odpowiedz

9

Oto rozwiązanie:

$client = new \Guzzle\Http\Client(); 
$request = $client->get($url); 

$request->getCurlOptions()->set(CURLOPT_SSL_VERIFYHOST, false); 
$request->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, false); 
$request->getCurlOptions()->set(CURLOPT_RETURNTRANSFER, true); 
$request->getCurlOptions()->set(CURLOPT_FOLLOWLOCATION, true); 
$request->getCurlOptions()->set(CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
$request->getCurlOptions()->set(CURLOPT_USERPWD, "$token:X"); 

$response = $request->send(); 
0

Rozwiązanie udało mi się dostać pracę na Guzzle6 jest:

$headers = array(); 
$headers['grant_type'] = 'client_credentials'; 
$headers['client_id'] = $clientid; 
$headers['client_secret'] = $clientSecret; 

$response = $this->client->post($urlAuth, ['form_params' => $headers]); 
$output = $response->getBody()->getContents(); 

tj tablicy nagłówka musi być opakowane w 'form_params'