Как контролировать сложную веб-страницу с помощью curl - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь отследить эту страницу и отправить электронное письмо, если оно изменится.Я пытался использовать curl, но это не сработало, потому что, кажется, он генерируется на лету с помощью JavaScript.

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Похоже, что вместо этого вы хотите проверить этот URL, поскольку именно здесь эта страница получает свои данные:

https://api.finra.org/data/group/otcMarket/name/otcDailyList

При просмотре исходной страницы откройте инструменты Chrome для разработчиков инажмите на вкладку «сеть».Вы увидите список запросов, сделанных для загрузки этой страницы.Ищите запрос к otcDailyList, он имеет тип XHR.Затем вы можете проверить заголовки, чтобы увидеть используемые заголовки запроса и полезную нагрузку, чтобы увидеть, какова была полезная нагрузка POST.С помощью этой информации вы можете имитировать запрос, используя curl.

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

{
    "quoteValues":false,
    "delimiter":"|",
    "limit":100000,
    "sortFields":["-dailyListDatetime","+oldSymbolCode"],
    "dateRangeFilters":[
        {
            "fieldName":"dailyListDatetime",
            "startDate":"2019-04-27 00:00:00",
            "endDate":"2019-04-27 23:59:59"
        }
    ]
}

Я предполагаю, что вы можете изменить это, чтобы получитьданные, которые вам нужны (например, скорректируйте даты).

Таким образом, в вашем запросе curl используйте те же заголовки запроса и полезную нагрузку, чтобы увидеть, сможете ли вы извлечь правильные данные.

Получите взломэто и посмотри, что ты обнаружишь.

0 голосов
/ 21 мая 2019

После долгого времени, проведенного с помощью некоторых других программистов, вот решение с тегами и тегами для всех, кто просматривает массив в данных полезной нагрузки массива:

$RequestPayload = array(
            "quoteValues" => false,
            "delimiter" => "|",
            "limit" => 100000,
            "sortFields" => ["-dailyListDatetime","+oldSymbolCode"],
            "dateRangeFilters" => [array("fieldName"=>"dailyListDatetime","startDate"=>"2019-05-21 00:00:00","endDate"=>"2019-05-21 23:59:59")], 
            );

        $JSONEncoded = json_encode($RequestPayload);
        echo "<P> JSONEncoded: <P><P> $JSONEncoded <P><P>";

        $ReferLink = 'https://Website.com';

        $CurlHandle = curl_init();
        curl_setopt($CurlHandle, CURLOPT_URL, "https://api.Website.com");
        curl_setopt($CurlHandle, CURLOPT_REFERER, $ReferLink);
        curl_setopt($CurlHandle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($CurlHandle, CURLOPT_HTTPHEADER,array('Content-Type: application/json')); 
        curl_setopt($CurlHandle, CURLOPT_POST, 1);
        curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($CurlHandle, CURLOPT_POSTFIELDS,json_encode($RequestPayload));

        $output = curl_exec($CurlHandle);
        echo "<pre>";
        echo $output;

        die();
...