Próbuję połączyć się z interfejsem API, uwierzytelnić użytkownika, a następnie wyświetlić szczegóły użytkownika. Osiąga się to przez pierwsze dostępu do końcowego logowania naUtrzymywanie sesji przy życiu dzięki Curl i PHP
http://api.example.com/login/<username>/<password>
się zalogować, a następnie po aby zobaczyć dane użytkownika:
http://api.example.com/user/
To wszystko działa w przeglądarce internetowej. Jednak gdy spróbuję użyć Curl, logowanie działa dobrze, ale przy próbie wyświetlenia szczegółów użytkownika otrzymuję błąd 401, nieautoryzowany. Uważam, że dzieje się tak dlatego, że Curl nie zapisuje poprawnie plików cookie sesji? Czy ktoś może wskazać, dlaczego nie działa i jak to naprawić? Próbowałem przeszukiwać wymianę stosów, jednak żadne z rozwiązań, które wypróbowałem, nie zadziałało w mojej sytuacji. Kod, którego używam do zwijania punktów końcowych, pokazano poniżej. Dzięki!
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 "<br/><br/>";
$file = fopen("cookie.txt", 'r');
echo fread($file, 100000000);
echo "<br/><br/>";
// 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);
Ten kod wyjściowy:
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!"}
Doh! Nie mogę uwierzyć, że przegapiłem tę opcję, to ma sens. Dzięki! – John
czy można ustawić plik cookie jako zmienną (nie chcę za każdym razem przesyłać pliku)? – trainoasis
@trainoasis Zobacz opcję 'CURLOPT_COOKIE' – drew010