2015-07-31 20 views
5

Tôi đang cố gắng sử dụng Guzzle thay vì trực tiếp sử dụng cURL để đạt được và yêu cầu HTTP. Làm thế nào để tôi thực hiện cùng một loại yêu cầu này nhưng với Guzzle? Hoặc tôi chỉ nên dính vào cURL?Dịch yêu cầu cURL thành 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"); 

Đây là cách tôi có. Tôi tiếp tục chạy vào 401 lỗi trái phép. Tôi biết tôi có thông tin xác thực chính xác. Điều khiến tôi nghĩ rằng tôi không đi đúng hướng là tài liệu hướng dẫn nói rõ: auth hiện chỉ được hỗ trợ khi sử dụng trình xử lý cURL, nhưng việc tạo một thay thế có thể được sử dụng với bất kỳ trình xử lý HTTP nào được lên kế hoạch. Nhưng từ sự hiểu biết của tôi Guzzle mặc định với cURL.

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

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

Bạn có thể nhận được nhiều câu trả lời hơn cho câu hỏi của mình khi đăng trên Stack Exchange, đã bỏ phiếu để di chuyển. – carlcs

+0

Như đã đề cập bởi @carlcs, câu hỏi này phù hợp hơn nhiều với Stack Overflow. Mặc dù hữu ích đối với một số nhà phát triển plugin Craft, nó thực sự không phải là một câu hỏi của Craft. –

+0

Rất tuyệt! Tôi đã có thể bỏ phiếu hai lần, một lần vào Craft SE và bây giờ ở đây! :) – carlcs

Trả lời

9

Dưới đây là giải pháp:

$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

Các giải pháp tôi đã có thể để có được làm việc cho Guzzle6 là:

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

tức là mảng tiêu đề đã được bọc trong 'form_params'

Các vấn đề liên quan