Может открывать PSE API, используя браузер, но не используя переполнение стека

Я пытаюсь записать данные с сайта Филиппинской фондовой биржи. Я обнаружил, что у них есть конечная точка, которая http://www.pse.com.ph/stockMarket/companyInfo.html?method=fetchHeaderData&Компания = 29&безопасность = 146

Я могу получить к нему доступ с помощью любых браузеров, за исключением случаев, когда я перехожу в режим инкогнито, где мне показывают содержимое с надписью «Отказано в доступе», и загрузка никогда не прекращается. Когда я пытаюсь получить доступ к нему с помощью PHP, я совершенно уверен, что то же самое происходит позже.

Я пытаюсь получить доступ к нему с помощью PHP безрезультатно, вот попытки, которые я пытался:

  1. file_get_contents
  2. cURL с пользовательским агентом
  3. CURL с временными куки
  4. Перепробовал все в localhost и в живом сервере.

Код:

$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. Доступ запрещен

Что касается проблемы с отказом в доступе, это связано с cookie. Ответил ниже @Wayne.


К сожалению, я не могу принять два ответа.

1

Решение

Попробуйте это решение. преобразовать ваши данные в массив, а затем передать этот массив в CURLOPT_POSTFIELDS

$posts = array(
"method"=>"fetchHeaderData",
"ajax"=>"true",
"company"=>29,
"security"=>146
);
$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,$posts);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
var_dump(curl_exec($ch));
curl_close ($ch);
0

Другие решения

Это потому, что у них есть настройки сервера, чтобы вы не делали этого. Они защищают данные с печеньем.


Детали куки

Когда вы посещаете сайт http://www.pse.com.ph/stockMarket/companyInfo.html он дает вам печенье, поскольку он знает, что вы человек.

В вашем браузере инструменты введите

document.cookie

чтобы увидеть ваше печенье. Он предоставит вам данные, потому что у вас есть cookie.

Удалить куки

document.cookie = «JSESSIONID =; expires = Чт, 01 января 1970 г. 00:00:00 UTC; путь = /;»;

и посетить

http://www.pse.com.ph/stockMarket/companyInfo.html?method=fetchHeaderData&Компания = 29&безопасность = 146

не собираясь получить печенье http://www.pse.com.ph/stockMarket/companyInfo.html сначала вы получите 403 (запрещено)

Также у них нет jsonp с обратным вызовом, поэтому запрос ajax нарушит междоменную безопасность. Запросы на JSON должны поступать со страниц, которые исходят из их домена или утвержденного домена.


Почему они это сделали.

Скорее всего, их лицензия на информацию не позволяет им передавать ее другим веб-сайтам, или они должны / хотят получать оплату за предоставление информации другим веб-сайтам. Или у них есть условия использования информации.


Где вы можете получить данные … данные хотят быть свободными

Я не вижу нигде на их сайте http://www.pse.com.ph где у них есть информация об API и как запросить разрешение на доступ к ней.

Программируемый веб был источником номер один для поиска API, у них есть 96 фондовых API в списке … Очевидно, я не могу просто скопировать их данные и вставить их сюда, но один из этих API может работать для вас?

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector