【发布时间】:2015-12-28 06:20:11
【问题描述】:
我正在尝试使用 PHP/Curl 从公共网站下载开放数据项目的文件。如何使用 PHP/Curl 模拟下载请求以获取文件?
你能帮我解决这个问题吗?或者至少我应该如何表达这个问题?
该站点使用 javascripts 来生成下载操作。下载请求是通过后请求完成的(因此没有可见的 URL)。
该网站是:http://cri.nbb.be/bc9/web/catalog?lang=N&companyNr=0403233750 我尝试下载的文件是与实体相关的最新 XBRL 文档。
下载请求的头部如下:
Host: cri.nbb.be
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://cri.nbb.be/bc9/web/catalog?execution=e1s1
Cookie: be.nbb.selected.language=nl; JSESSIONID=00003DzVLI5-4k_otlBnJ3ylzKQ:-1; TS01f1bcac=011cb8a973def2718973d95f3988ed8392a49007ea289ef41640f86d275cfbbcc3df12bec9ffca6ced4717c1f1904a1785807d461dd198bf5951a9c35c905e55eeb738ad098adfe9ea3eef44ea3732108f528c6c5d; BIGipServerprd-bc9=270313664.46162.0000
Connection: keep-alive
我可以使用以下代码获取生成下载请求的源文件(带有javascript的htlm):
$filename = "0403233750.html";
$url = "http://cri.nbb.be/bc9/web/catalog?lang=N&companyNr=0403233750";
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$output = curl_exec ($ch);
if (preg_match('/expired/', $output)){
return "stop";
}
if (preg_match('/problem/', $output)){
return "stop";
}
if (!preg_match('/xml/', $output)){
return "stop";
}
file_put_contents($filename, $output);
curl_close ($ch);
但是一旦我有了 javascript,我不知道我需要用什么来在 PHP/Curl 中生成下载请求。
【问题讨论】:
-
你想做什么?使用 JavaScript 下载文件?还是模拟使用 PHP.cURL 下载文件的 JavaScript 代码?
-
感谢您的快速回答。我想使用 PHP/curl 模拟 JavaScript
标签: javascript php curl