Yêu cầu thg 3 25, 2019 4:10 SA 740 0 1
  • 740 0 1
0

Cách sử dụng cURL CURLOPT_COOKIEJAR với Laravel Storage

Chia sẻ
  • 740 0 1

Mình có sử dụng cURL để làm login vào 1 trang web từ trang của mình đến gửi request rồi lấy ra cookie, mình sử dụng curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookiePath); để store file cookie lại . Mình làm trên local thì rất ok nhưng gặp phải vấn đề là khi lên server thì CURLOPT_COOKIEJAR nó không store được vào folder Storage, nên có cách nào để mấy lấy nội dung của CURLOPT_COOKIEJAR để mình sử dụng Storage của Lar hay sử dụng luôn CURLOPT_COOKIEJAR để store vào Storage không nhỉ?

1 CÂU TRẢ LỜI


Đã trả lời thg 3 25, 2019 4:18 SA
Đã được chấp nhận
+1

Có vẻ vẫn là câu hỏi lần trước của bạn. 😄

Mình nghĩ sau khi gửi request đăng nhập đi, nếu thành công bạn có thể lấy cookie trong header của response ra rồi lưu vào session phía bên web của bạn cũng được. Lần request tiếp theo bạn đọc từ session ra thôi. Mọi thứ cũng có vẻ đơn giản hơn. 😉

Không liên quan lắm, nhưng mình nghĩ bạn dùng package GuzzleHttp để gửi request cho code nó dễ đọc hơn. 😝

Chia sẻ
Avatar Nguyen Tuan Anh @TuanAnh9996
thg 3 25, 2019 4:29 SA

@huukimit lần trước thì mình làm ok rồi, giờ mình đang gặp vấn đề là trên server thì cái CURLOPT_COOKIEJAR nó không gen được file vào folder storage nên khi gửi request thì nó không có file cookiejar đấy. Nên mình đang tìm cách lấy dữ liệu từ file đó ra rồi lưu lại bằng Storage, mình cũng đang muốn chuyển sang Guzzle nhưng chắc phải để sau vì bên mình đang có cái thư viện dùng cURL nên đang dùng luôn 😃)

Avatar Nguyen Tuan Anh @TuanAnh9996
thg 3 25, 2019 5:12 SA

@huukimit mình đang chuyển qua Guzzle dùng thì khi mình gửi kèm cookie qua thì request nó không được xác thực nữa

$jar = new \GuzzleHttp\Cookie\CookieJar();
        $client = new Client([
                    'cookies' => $jar,
                ]);
        $rs = $client->request('POST', self::URL_LOGIN, [
                        'form_params' => [
                                            'j_username' => $this->accountBank->uid,
                                            'j_password' => $request->pass,
                                        ]
                    ]);
        $this->setCookies($jar);
        
        $rs = $client->request('GET', self::DETAIL_URL, ['cookies' => $this->getCookies()]);
        
        dd($rs->getBody()->getContents());

Mình có dump cái cookieJar ra xem thì nó là 1 array, mình thử so sánh với cái file cookie gen ra từ cURL thì nó khác nhau, không biết nó có ảnh hưởng gì không nhỉ?

Cookie Guzzle

Screenshot_2.png

Cookie cURL

Screenshot_3.png

thg 3 25, 2019 5:50 SA

@TuanAnh9996 Nếu ghi ra file thì bạn check permission của thư mục storage trên server xem có quyền ghi ko. Hoặc ghi sai đường dẫn ko? Sử dụng storage_path lấy absolute path ra cho chắc chắn.

thg 3 25, 2019 7:09 SA

Còn nếu lưu vào session + guzzlehttp thì bạn thử làm này xem:

// Get cookie từ response ra
$cookies = $guzzleResponse->getHeader('set-cookie');

Rôi lưu cái string $newCookies vào trong session để các lần request sau dùng.

Avatar Nguyen Tuan Anh @TuanAnh9996
thg 3 25, 2019 7:33 SA

mình xử lý được rồi, giờ đang chuyển qua Guzzle cho bản mới 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí