Javascript 如何使用curl监控困难的网页

Javascript 如何使用curl监控困难的网页,javascript,php,web,curl,monitor,Javascript,Php,Web,Curl,Monitor,我正在尝试监视并发送电子邮件,如果它发生变化。我尝试使用curl,但这不起作用,因为它似乎是用JavaScript动态生成的。您似乎想检查此URL,因为这是该页面获取数据的地方: 查看原始页面时,打开Chrome开发工具并单击“网络”选项卡。您将看到加载该页面的请求列表。查找对“otcDailyList”的请求,它有一个XHR类型。然后,您可以检查报头以查看使用的请求报头和有效负载,以查看POST有效负载是什么。有了这些信息,您可以使用curl模拟请求 从我看到的情况来看,请求负载如下所示:

我正在尝试监视并发送电子邮件,如果它发生变化。我尝试使用curl,但这不起作用,因为它似乎是用JavaScript动态生成的。

您似乎想检查此URL,因为这是该页面获取数据的地方:

查看原始页面时,打开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请求中,使用相同的请求头和post有效负载来查看是否可以提取正确的数据


试一试,看看你发现了什么。

在这方面花了很多时间之后,在其他一些程序员的帮助下,这是一个打包和标记的解决方案,适用于正在查看阵列请求有效负载数据中的阵列的任何其他人:

$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();
$RequestPayload=array(
“quoteValues”=>false,
“分隔符”=>“|”,
“限额”=>100000,
“sortFields”=>[“-dailyListDatetime”、“+oldSymbolCode”],
“dateRangeFilters”=>[数组(“fieldName”=>“dailyListDatetime”,“startDate”=>“2019-05-21 00:00:00”,“endDate”=>“2019-05-21 23:59:59”)],
);
$JSONEncoded=json_encode($RequestPayload);
echo“

JSONEncoded:

$JSONEncoded

”; $referelink='1https://Website.com'; $CurlHandle=curl_init(); curl_setopt($CurlHandle,CURLOPT_URL,”https://api.Website.com"); curl_setopt($CurlHandle,CURLOPT_REFERER,$referelink); 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\u exec($CurlHandle); 回声“; echo$输出; 模具();


您尝试过selenium吗?但是@peter评论说这也很合适。你的问题太广泛了。问一个关于
如何监控otce.finra.org
,而不是
如何监控一个困难的网页
,这太宽泛了。感谢您的回答。我认为,询问如何监控整个网站比只监控一个页面要广泛得多。我真正想做的就是知道它什么时候改变(每天都会改变),我并不在乎它的实际内容……我看了Selenium。看起来很有趣。但是,我有一个PHP脚本,我想在其中集成一些CUrl过程来检查页面的更改,然后从该PHP脚本发送电子邮件。此脚本已解析其他网页,没有问题。但是我在我发布的页面上找不到要监控的内容…zThat或者谢谢你Peter。。。我查看了这两个数据,但其中只有2018年的旧数据。此页面每天在不同时间更新。看起来您可以为json添加一些
内容类型
接受
标题,然后您可以添加一些查询参数以获取其他数据。当页面加载时,您可以查看dev-tools-network选项卡以查看Ajax请求。很抱歉,Peter,但是我对Ajax的了解还不够,无法做到这一点。这就是为什么我要求社区在这方面提供一些帮助……谢谢。用完整的脚本更新您的问题,并显示哪些不起作用。