curl вземете изходния код GETparams

Искам да получа html изходния код от тази страница: http://bahn.ltur.com/index/search/?lang=de_DE&searchin=DE-SB-VI&trip_mode=trip_simple&from_spar=Hamburg+Dammtor&to_spar=Leipzig+Hbf&start_datum=01.07.2012&start_time=23%3A49&end_datum=01.07.2012&end_time=23%3A51&SEA_adults=1&trainclass_spar=2

Мога да вляза в сайта, когато отида на този URL адрес. не мога да получа изходния код чрез curl. не в bash "curl -iL url > site.html" нито с този php скрипт: получавам началната страница (bahn.ltur.com).

Код за изпращане на GET заявка

$ch=curl_init();

curl_setopt($ch,CURLOPT_URL,'http://bahn.ltur.com/index/search/?lang=de_DE&searchin=DE-SB-VI&trip_mode=trip_simple&from_spar=Hamburg+Dammtor&to_spar=Leipzig+Hbf&start_datum=01.07.2012&start_time=23%3A49&end_datum=01.07.2012&end_time=23%3A51&SEA_adults=1&trainclass_spar=2');
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_exec($ch);

аз също се опитах да изпратя POST параметри на тази конкретна страница - но без успех. формулярът е на тази страница: http://bahn.ltur.com/ с [...] когато натиснете 'търсене' и ще видите за кратко URL адреса по-горе (blah/index/search/?params[...]).

някаква помощ?

///////Редактиране:

///////Отговор:

Първо: вземете бисквитката от страницата (w/GET-params) Второ: отидете на страницата с подробности и изпратете бисквитката.

Благодаря на @Daniel Stenberg за подсказката! Дайте му малко репутация!

/* get cookie */
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://bahn.ltur.com/index/search/?lang=de_DE&searchin=DE-SB-VI&trip_mode=trip_simple&from_spar=Hamburg+Dammtor&to_spar=Leipzig+Hbf&start_datum=01.07.2012&start_time=23%3A49&end_datum=01.07.2012&end_time=23%3A51&SEA_adults=1&trainclass_spar=2');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
$html = curl_exec($ch);
/* get page */
$ch = curl_init("http://bahn.ltur.com/details");
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

echo $html;
curl_close($ch);

person meeeeeh    schedule 27.06.2012    source източник


Отговори (3)


Опитахте ли да добавите:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$html = curl_exec($ch);

без първата опция, curl просто ще изведе всичко, което извлича. И за стриктно „добро“, трябва да проверите и върнатата стойност от curl_exec:

if ($html === false) {
   die("Curl error: " . curl_error($ch));
}
person Marc B    schedule 27.06.2012
comment
благодаря, но все още няма успех. няма грешка, все още получавам "началната" страница. - person meeeeeh; 27.06.2012

Опитайте да добавите следното във вашия cUrl код

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

Частта SSL_VERIFYER означава, че няма да обърне внимание, ако няма SSL сертификат.

person user1485518    schedule 27.06.2012

Най-вероятно това се случва, защото страницата, на която е формулярът за търсене, задава бисквитки, така че когато изпращате заявката за търсене, трябва да предадете бисквитките и там. Страницата за търсене изглежда настройва/актуализира и бисквитката BAHNSESSID.

person Daniel Stenberg    schedule 27.06.2012
comment
Благодаря ти! Това предполагам и аз. Да видим как ще го накарам да работи... curl_setopt($ch, CURLOPT_COOKIE, BAHNSESSID= fd12a6c3d517c702eab0014879d551ef; bla=foo); - person meeeeeh; 27.06.2012