0

我想从该页面获取 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(w/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);
4

3 回答 3

1

Have you tried adding:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$html = curl_exec($ch);

without the first option, curl will simply output whatever it's fetching. And for strict "goodness", you should check the return value from curl_exec as well:

if ($html === false) {
   die("Curl error: " . curl_error($ch));
}
于 2012-06-27T11:25:32.697 回答
0

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

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

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

于 2012-06-27T12:02:20.927 回答
0

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

于 2012-06-27T13:05:15.647 回答