我试图从菲律宾证券交易所网站记录数据。我发现他们的端点是http://www.pse.com.ph/stockMarket/companyInfo.html?method=fetchHeaderData&company=29&security=146可以使用浏览器打开PSE API但不使用PHP
我可以使用任何浏览器清楚地访问它,除非当我进入隐身模式,其中显示的内容是拒绝访问并且从不停止加载。当我尝试使用PHP访问它时,我确信发生的事情与后者相同。
我试图访问使用PHP无济于事吧,这里是我试过的尝试:
- 的file_get_contents
- 卷曲与用户代理
- 卷曲临时饼干
- 试过所有在本地主机和在服务器中。
代码:
$c = tempnam ("/tmp", "CURLCOOKIE");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pse.com.ph/stockMarket/companyInfo.html");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $c);
curl_setopt($ch, CURLOPT_COOKIEFILE, $c);
curl_setopt($ch, CURLOPT_POSTFIELDS, "method=fetchHeaderData&ajax=true&company=29&security=146");
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
var_dump(curl_exec($ch));
curl_close ($ch);
我没有对为何和如何发生的任何明确的想法。有人可以向我解释为什么会发生,以及有什么可能的解决方案(只有在可能的情况下才使用PHP)
我回顾了此API上的其他开发者的方法(它们都使用Java实现它),它只是一个简单的POST请求,它完成了。我还没有确认他们的代码是否仍在工作。我无法发布链接到他们的存储库(有限)。
的解决方案:
问题1.无法访问API
$posts = array(
"method"=>"fetchHeaderData",
"ajax"=>"true",
"company"=>29,
"security"=>146
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pse.com.ph/stockMarket/companyInfo.html");
curl_setopt($ch, CURLOPT_POSTFIELDS,$posts);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
var_dump(curl_exec($ch));
curl_close ($ch);
好像我有两个不同的问题。我现在可以使用上面的代码访问和使用API。不需要其他选项。将帖子数据转换为数组解决了问题。
问题2.拒绝访问
论拒绝访问的问题,它是饼干有关。 @Wayne回答如下。
不幸的是,我不能接受两个答案。
当我访问该链接时,我也看到访问被拒绝。您确定他们没有包含您的外部IP的终端上的白名单吗?否则,您可能在访问该链接之前登录了他们的平台? – Glubus
在我的结尾url根本不开放 –
活着死了,它现在似乎工作!问心无愧? – delboy1978uk