2017-07-31 15 views
5

Tôi đang sử dụng Guzzle để đăng nhập trang web API của mình và trong thời điểm Im đăng nhập bằng thông tin xác thực phù hợp, tôi lấy lại cookie với một RefreshToken để gửi nó trong cuộc gọi tiếp theo, đây là mã đơn giản (và hoạt động tốt) của tôi :GuzzleHttp: làm cách nào để lưu cookie từ phản hồi POST và sử dụng nó trong POST tiếp theo?

$client = new Client(array(
      'cookies' => true 
     )); 


     $response = $client->request('POST', 'http://myapi.com/login', [ 
      'timeout' => 30, 
      'form_params' => [ 
       'email' => $request->get('email'), 
       'password' => $request->get('password'), 
      ] 
     ]); 

và tôi lấy lại phản ứng đúng với một cookie, tôi có thể nhìn thấy các tập tin cookie bằng cách sử dụng:

$newCookies = $response->getHeader('set-cookie'); 

bây giờ, tôi cần phải sử dụng cookie này trong các cuộc gọi tới, và tôi biết Guzzle có thể lưu các cookie cho tôi và gửi nó tự động (hoặc không) trong cuộc gọi tiếp theo bằng cách sử dụng một "CookieJar" hoặc "SessionCookieJar", tôi đã cố gắng sử dụng nó nhưng tôi không se e cookie trong 'jar', đây là những gì tôi đã làm:

$cookieJar = new SessionCookieJar('SESSION_STORAGE', true); 

     $client = new Client([ 
      'cookies' => $cookieJar 
     ]); 

     $response = $client->request .... 

nhưng, khi tôi lấy cái bánh trở lại từ POST, tôi có thể nhìn thấy nó chỉ bằng cách sử dụng:

$newCookies = $response->getHeader('set-cookie'); 

và nó không có trong cookieJar, vì vậy nó sẽ không gửi nó trong cuộc gọi tiếp theo .. Tôi đang thiếu gì ở đây?

Cảm ơn bạn!

+0

http://docs.guzzlephp.org/en/stable/quickstart.html#cookies. Bạn cần đặt jar cho yêu cầu đăng nhập để nó thu thập cookie – Phil

+0

Cảm ơn câu trả lời của bạn, tôi đã cố gắng đặt nó trong yêu cầu và trong init client mới không có tác dụng (Tôi đã đọc hướng dẫn nhiều lần), bạn có thể vui lòng thêm một số mã? –

Trả lời

1

Theo tài liệu here, ['cookies' => true] chỉ ra việc sử dụng một hộp bánh chung cho tất cả các yêu cầu, trong khi ['cookies' => $jar] chỉ ra việc sử dụng một cookie jar cụ ($jar) để sử dụng với yêu cầu/phản ứng của khách hàng. Vì vậy, bạn sẽ cần phải sử dụng một trong hai:

$client = new Client(array(
    'cookies' => true 
)); 


$response = $client->request('POST', 'http://myapi.com/login', [ 
    'timeout' => 30, 
    'form_params' => [ 
     'email' => $request->get('email'), 
     'password' => $request->get('password'), 
    ] 
]); 

// and using the same client 

$response = $client->request('GET', 'http://myapi.com/next-url'); 

// or elsewhere ... 

$client = new Client(array(
    'cookies' => true 
)); 

$response = $client->request('GET', 'http://myapi.com/next-url'); 

hoặc

$jar = new CookieJar; 

$client = new Client(array(
    'cookies' => $jar 
)); 


$response = $client->request('POST', 'http://myapi.com/login', [ 
    'timeout' => 30, 
    'form_params' => [ 
     'email' => $request->get('email'), 
     'password' => $request->get('password'), 
    ] 
]); 

// and using the same client 

$response = $client->request('GET', 'http://myapi.com/next-url'); 

// or elsewhere ... 

$client = new Client(array(
    'cookies' => $jar // the same $jar as above 
)); 

$response = $client->request('GET', 'http://myapi.com/another-url'); 
+0

Cảm ơn bạn, bạn đã đúng, tôi đã tìm ra nó :) – EranLevi

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