Zauważyłem "dziwne" zachowanie php CURL, które wysyła mi orzechy. Zasadniczo to, co robię, polega na wykonywaniu połączenia uwierzytelnionego z curl. Oto wyciąg z mojego kodu:php curl z podsumowaniem zwraca dwie odpowiedzi
curl_setopt($this->c, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($this->c, CURLOPT_USERPWD, $username . ":" . $password);
To działa dobrze a serwer rzeczywiście wraca z „Tak, pod warunkiem że prawo poświadczeń” rodzaju wiadomości. Tylko kłopot polega na tym, że surowa odpowiedź http jest nieco dziwna, ponieważ w rzeczywistości zawiera 2 odpowiedzi zamiast jednej. Oto co curl_exec ($ this-> c) wypluwa:
HTTP/1.0 401 Unauthorized
Date: Tue, 23 Oct 2012 08:41:18 GMT
Server: Apache/2.2.20 (Ubuntu)
X-Powered-By: PHP/5.3.6-13ubuntu3.9
WWW-Authenticate: Digest realm="dynamikrest-testing",qop="auth",nonce="5086582e95104",opaque="4b24e95490812b28b3bf139f9fbc9a66"
Vary: Accept-Encoding
Content-Length: 9
Connection: close
Content-Type: text/html
HTTP/1.1 200 OK
Date: Tue, 23 Oct 2012 08:41:18 GMT
Server: Apache/2.2.20 (Ubuntu)
X-Powered-By: PHP/5.3.6-13ubuntu3.9
Vary: Accept-Encoding
Content-Length: 9
Connection: close
Content-Type: text/html
"success"
Nie rozumiem dlaczego to zawiera pierwszą odpowiedź od serwera (ten, w którym stwierdza się, że wymaga uwierzytelnienia).
Czy ktoś może rzucić nieco światła na tę kwestię? Jak uniknąć kumulacji odpowiedzi?
Cheers
ja * * dokładnie ten sam problem. Ten komentarz nie dodaje nic do rezolucji, ale chciałem pokazać ludziom, że to nie jest całkowicie odosobniony problem. – Hezad
W końcu użyłem funkcji zawijania wierszy poleceń PHP exec(). To daleki od ideału, ale działa dobrze na prototypowanie: exec ('curl --digest -u the_login: the_password the_url', $ params); Ciągle szukam i czekam na odpowiedź. – Hezad
Właśnie przetestowałem to z wireshark i podobną konfiguracją, wygląda na to, że curl uruchamia 2 żądania podczas używania uwierzytelniania digest, a pierwsze jest bez żadnego uwierzytelnienia. Pytanie brzmi teraz, dlaczego linia poleceń curl ignoruje tę odpowiedź i php_curl ją dołącza. – gries