Hướng dẫn php curl get session id cookie - php curl lấy cookie id phiên

Tôi đang cố gắng kết nối với API, xác thực người dùng và sau đó xem chi tiết người dùng. Điều này được thực hiện bằng cách đầu tiên truy cập điểm cuối đăng nhập tại

http://api.example.com/login//

Để đăng nhập và sau đó để xem chi tiết người dùng:

http://api.example.com/user/

Tất cả điều này hoạt động trong một trình duyệt web. Tuy nhiên, một khi tôi cố gắng sử dụng Curl, đăng nhập hoạt động tốt, nhưng khi cố gắng xem chi tiết người dùng, tôi sẽ lấy lại một lỗi trái phép 401. Tôi tin rằng điều này là do Curl không lưu cookie phiên đúng cách? Ai đó có thể chỉ ra lý do tại sao nó không hoạt động và làm thế nào để sửa chữa nó? Tuy nhiên, tôi đã thử tìm kiếm Stack Exchange, tuy nhiên, không có giải pháp nào tôi thử đã làm việc cho tình huống của mình. Mã tôi đang sử dụng để uốn các điểm cuối được hiển thị bên dưới. Cảm ơn!

define("COOKIE_FILE", "cookie.txt");

// Login the user
$ch = curl_init('http://api.example.com/login/joe/smith');
curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
echo curl_exec ($ch);

// Read the session saved in the cookie file
echo "

"; $file = fopen("cookie.txt", 'r'); echo fread($file, 100000000); echo "

"; // Get the users details $ch = curl_init('http://api.example.com/user'); curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); echo curl_exec ($ch);

Mã này sẽ xuất ra:

HTTP/1.1 200 OK Date: Mon, 22 Oct 2012 21:23:57 GMT Server: LiteSpeed Connection: close X-Powered-By: PHP/5.3.14 Set-Cookie: cfapi=f481129c9616b8f69cc36afe16466545; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Type: application/json X-Powered-By: CFWAPI 0.1a Content-Length: 46 {"status":200,"msg":"Successfully Logged In."}

# Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. api.example.com FALSE   /   FALSE   0   cfapi 94f63b07ccf7e34358c1c922341c020f 

HTTP/1.1 401 Unauthorized Date: Mon, 22 Oct 2012 21:23:57 GMT Server: LiteSpeed Connection: close X-Powered-By: PHP/5.3.14 Set-Cookie: cfapi=a8eb015a7c423dde95aa01579c4729a4; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Type: application/json X-Powered-By: CFWAPI 0.1a Content-Length: 49 {"status":401, "msg":"You need to login first!"}

29 tháng 4 năm 2019 PHP, lập trình PHP, Programming

Các tập lệnh PHP có khả năng yêu cầu nội dung từ các máy chủ khác bằng Curl. Curl đưa ra yêu cầu đến trang máy chủ từ xa, tìm nạp nội dung và trả lại cho tập lệnh. Curl có thể thực hiện nhận và đăng các yêu cầu, truy xuất và đẩy dữ liệu tương ứng, hoạt động rất giống như một máy khách trình duyệt thực hiện các yêu cầu đến một trang web.cURL. cURL makes a request to a remote server page, fetches the content and returns it to the script. cURL can make GET and POST requests, retrieving and pushing data respectively, behaving very much like a browser client making requests to a website.

Tuy nhiên, trình duyệt Web sử dụng các phiên cung cấp một số loại bộ nhớ giữa các yêu cầu đối với các tương tác của máy khách với máy chủ. Cookies phiên lưu trữ thông tin Máy chủ hướng dẫn khách hàng lưu trữ và các thuộc tính này sau đó được gửi lại cho máy chủ trong các yêu cầu sau. Máy chủ sẽ thường xuyên sử dụng chúng để xác định khách hàng hoặc cung cấp cho nó một trải nghiệm khác về bố cục trang hoặc các dịch vụ có sẵn.

Để mô phỏng quá trình này trong PHP với Curl, chúng ta có thể sử dụng cookie Curl. Thực hiện yêu cầu Curl PHP tiêu chuẩn:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$content = curl_exec($ch);
curl_close($ch);

Mã này sẽ tìm nạp trang từ xa bằng yêu cầu POST, nhưng nó không sử dụng cookie để không có phiên nào được giữ. Để cho phép Curl lưu trữ và gửi cookie khi liên hệ với máy chủ này, chúng tôi cần chỉ định tệp cookie:

$cookieFile = "cookies.txt";
if(!file_exists($cookieFile)) {
    $fh = fopen($cookieFile, "w");
    fwrite($fh, "");
    fclose($fh);
}

Các tập tin phải được ghi bởi máy chủ web tất nhiên. Khi nó có thể truy cập được, việc thêm một vài dòng mới vào ví dụ trên cùng sẽ mang lại chức năng cookie:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); // Cookie aware
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); // Cookie aware
$content = curl_exec($ch);
curl_close($ch);

Rằng nó - tất cả các yêu cầu Curl bằng mã này sẽ lưu trữ và gửi cookie.

Thông tin về các Tác giả

Perry

Nhà phát triển ứng dụng và web Aussie, sống ở Phần Lan. Xây dựng an toàn, OSS: Trình quản lý mật khẩu Buttercup. Trưởng phòng kỹ thuật tại kiosked (adtech).

Trang web này sử dụng cookie để cải thiện trải nghiệm của bạn. Chúng tôi sẽ giả sử bạn ổn với điều này, nhưng bạn có thể từ chối nếu bạn muốn.