curl获取源代码GETparams

时间:2012-06-27 11:22:04

标签: php curl

我想从该页面获取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

当我访问该网址时,我可以访问该网站。我无法通过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/ [...] 当你点击“搜索”时,你会看到上面的网址短时间(blah / index / search /?params [...])。

任何帮助?

///////编辑:

///////答案:

首先:从页面获取cookie(带GET-params) 第二:转到详细信息页面并发送cookie。

感谢@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);

3 个答案:

答案 0 :(得分:1)

您是否尝试过添加:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$html = curl_exec($ch);

没有第一个选项,curl将只输出它所取的任何内容。对于严格的“善”,你应该检查curl_exec的返回值:

if ($html === false) {
   die("Curl error: " . curl_error($ch));
}

答案 1 :(得分:0)

尝试在您的cUrl代码中添加以下内容

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

SSL_VERIFYER部分意味着如果它没有SSL证书就不会引起注意。

答案 2 :(得分:0)

最有可能发生这种情况是因为搜索表单所在的页面设置了Cookie,因此当您发送搜索请求时,您也应该在那里传递Cookie。搜索页面似乎也设置/更新了BAHNSESSID cookie。