通过curl获取HTML内容时绕过加载屏幕


Bypassing loading screen when getting HTML content with curl

我们正在使用curl从第三方web服务器获取响应。有一个代码片段:

 $url = "https://book.some-site.com/cgi-bin/booking-form.cgi";
 $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388    Version/12.14";
 $ch = curl_init( $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");     
curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 0);          
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$content = curl_exec( $ch );
$err     = curl_errno( $ch );
$errmsg  = curl_error( $ch );
$header  = curl_getinfo( $ch );
curl_close( $ch );

一切都很好,直到我们在其中一个页面上遇到加载屏幕。我们从web服务器得到以下响应"…

我们正在处理您的请求…
您的搜索结果将很快显示。

",这是一个加载/等待屏幕。之后我们什么也得不到。在加载屏幕后在浏览器中工作时,将显示实际的响应。任何想法如何获得实际响应和绕过加载屏幕?

通常,当一个网站有一个加载屏幕,然后显示结果,而不把你重定向到一个新的页面,这意味着他们通过Ajax加载结果。因此,HTML页面加载时只显示"嘿,正在加载"消息,然后运行一些JavaScript从另一个页面下载实际内容。你需要研究他们的JS代码,然后加载他们通过Ajax加载的页面。

你可以考虑在你的web浏览器的开发工具中启用"记录xmlhttprequest",以便更容易地找出他们通过Ajax加载的页面