Jackblues
13.11.2009, 10:18:38
Witam,
Chcialbym poprosic o pomoc z problemem ze skryptem korzystajacym z CURL
Z jakiegos powodu CURL nie chce automatycznie przejsc do strony ktorej adres zwracany jest w Location:
Prosty kawalek kodu
<?php
$ch = curl_init('http://jakisserwer.com/search?ii=992323827378);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
$info = curl_getinfo($ch);
echo $info['http_code'];
echo "<!--".$data;
curl_close($ch);
?>
Odpowiedz z serwera wyglada tak - a spowdziewalbym sie strony do ktorej adres znajduje sie w Location:
302
HTTP/1.1 302 Found
Date: Fri, 13 Nov 2009 08:49:54 GMT
Server: Apache
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
P3P: CP="NON DEVa TAIa OUR BUS"
Location: /jpcng/SESSIONID/52e651f535fd6547bfafc12935111dce/books/detail/-/buchnum/138210972
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: SESSIONID=52e651f535fd6547bfafc12935111dce; path=/
Czy cos jeszcze trzeba zrobic zeby CURL sciagnal docelowa strone ?
Z gory dziekuje za wszelkie sugestie
Piotrek
vokiel
13.11.2009, 10:44:00
Serwer zwrócił nagłówek 302 (Znaleziono - żądany zasób jest chwilowo dostępny pod innym adresem a przyszłe odwołania do zasobu powinny być kierowane pod adres pierwotny)
Dodaj w curl obsługę ciasteczek, bo jak widać serwer kieruje na inny adres, który zawiera dane sesyjne
Kod
Location: /jpcng/SESSIONID/52e651f535fd6547bfafc12935111dce/books/detail/-/buchnum/138210972
Jackblues
13.11.2009, 11:05:32
Dzieki wielkie - Pomoglo ale nie dokonca. Jesli moglbym jeszcze poprosic o wskazowki.
Okazuje sie ze jest kolejny redirect -
302HTTP/1.1 302 Found
Date: Fri, 13 Nov 2009 09:56:25 GMT
Server: Apache
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
P3P: CP="NON DEVa TAIa OUR BUS"
Location: /jpcng/books/detail/-/buchnum/138210972
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=ISO-8859-1
Tym razem wyglada na bez ciasteczek .
Z dokumentacji CURL wyczytalem ze FOLLOWLOCATION dziala rekursywnie - bedzie podazal za wszystkimi redirect.
A tu sie zatrzymal na kolejnym . Z testow w przegladarce wynika ze to juz ostatni redirect.
Cookies wlaczylem
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
Dzieki
vokiel
13.11.2009, 11:44:59
A czy curl_error() coś zwraca?
Możesz też z nagłówków wydobyć ciąg location i przejść pod ten adres poprzez kolejne wywołanie cURL'a
Jackblues
13.11.2009, 11:58:00
curl_error nie zwraca nic.
Na razie tak chyba zrobie - ale zastanawia mnie dlaczego curl sie zatrzymuje po przejsciu pierwszego Location.
Zgodnie z dokumentacja powinien tak dlugo podazac za Location az dostanie strone bez location.
No ale moze jeszcze cos wynajde.
I tak wielkie dzieki za pomoc - z tymi cookies pewnie dluzsza chwile bym siedzial.
vokiel
13.11.2009, 12:38:42
A zobacz, czy to coś pomoże:
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
Jackblues
13.11.2009, 13:06:54
Niestety nie pomoglo - pewnie cos zle ustawilem.
Przed ustawieniem cookies wogole nie wykrywal redirect - teraz co najmniej jeden redirect dziala .
Ale ostatnie przejscie (wydaje sie ze 2-gie) bede musial zrobic recznie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.