我試圖從菲律賓證券交易所網站記錄數據。我發現他們的端點是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