之前也出现了这个问题,当时我记得已经解决了这个问题,但是昨天晚上我测试了一下访问对应的网址又出现了同样的问题,之后我按照之前的文章记录去重新操作,来来回回搞了很久依旧是报错。
可以看看之前的文章:
之后我甚至把网站的cdn从百度云切换到了腾讯云,本来期望能够搞定,但是实践后发现应该不是cdn的问题。
同样的代码我可以抓取别人的网站任意的内容,但是就无法抓取自己网站的xml文件。。。搞得头大,也搞了很久。[aru_25]
中午的时候我在电脑面前坐了很久,想了一下,以前都是使用curl进行获取数据的,现在既然PHP自带的函数无法抓取,那么我就自己构造一个请求方式去抓取自己网站的文件。
我也不考虑是不是网站使用的cdn拦截的问题了,直接从源代码进行修改即可。
刚开始构造了好几个curl,使用get方式进行获取数据,经过测试依旧还是有问题的。这些问题都是千奇百怪,有的是直接报错有的是直接没有反应。
这真的搞得我头都大了。好在我最后还是是用自己聪明的脑袋瓜把这个问题给解决了。[aru_17]
我的解决方式很简单,也是我之前没有考虑到的一点。我构造的curl方式抓取文件没有模拟一个cookies,仅仅是模拟的ua和请求类型,所以我尝试把cookies也放进请求数据头当中,很幸运测试一次成功!
下面是我现在的代码:
// 读取文件 $file = 'https://www.aaooo.cn/sitemaps.xml'; // curl请求头 $header = array( "cookie:X_CACHE_KEY=979e178e2178sa5564df5644wedsfdas2407faefc5b89dd; UM_distinctid=1770fc9d48as864d6qw-a5sd4q57f8-31346d-240000-1770fc9dcbfaf8; http304ok=1; username=adminiiiii; token=asdf8s4f4q8646a84sd68q4684d6zs84d56q4wd65a4fq; addinfo=%7B%22chkadmin%22%3A1%2C%22chkarticle%22%3A1%2C%22levelname%22%3A%22%5Cu7ba1%5Cu7406%5Cu5458%22%2C%22userid%22%3A%221%22%2C%22useralias%22%3A%22%5Cdd8as64d4q6sa48d64z5c4q3513qa%5Cu9593%5Cu4ed8asd4%22%5as4dasD; timezone=8; CNZZDATA1278516878=6189q46adq4965-1612505747-%7C161249874465147; CNZZDATA1259075192=4894310-4848864677622-https%253A%252F%252Fwww.baidu.com%252F%7C1612504715", "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, $header); $output = curl_exec($ch); curl_close($ch); preg_match_all('/<loc>(.*?)<\/loc>/', $output, $out, PREG_PATTERN_ORDER); $data = $out[1]; // echo '<pre>'; // print_r($data) ;
到这里已经是我第3次修改这个小小的功能了。前面两次也是出现相似的小问题。甚至我都不知道他这个bug是如何出现的,因为代码一直运行在同一台服务器当中,同样的环境,同样的PHP版本之上,所做的就是每天在凌晨的时候获取一下xml文件,把新增的内容提交到百度或者神马搜索引擎对应的提交接口中并记录到本地中。