Javascript 如何使用curl监控困难的网页
我正在尝试监视并发送电子邮件,如果它发生变化。我尝试使用curl,但这不起作用,因为它似乎是用JavaScript动态生成的。您似乎想检查此URL,因为这是该页面获取数据的地方: 查看原始页面时,打开Chrome开发工具并单击“网络”选项卡。您将看到加载该页面的请求列表。查找对“otcDailyList”的请求,它有一个XHR类型。然后,您可以检查报头以查看使用的请求报头和有效负载,以查看POST有效负载是什么。有了这些信息,您可以使用curl模拟请求 从我看到的情况来看,请求负载如下所示:Javascript 如何使用curl监控困难的网页,javascript,php,web,curl,monitor,Javascript,Php,Web,Curl,Monitor,我正在尝试监视并发送电子邮件,如果它发生变化。我尝试使用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的了解还不够,无法做到这一点。这就是为什么我要求社区在这方面提供一些帮助……谢谢。用完整的脚本更新您的问题,并显示哪些不起作用。