php禁止网页抓取(我另外一个博客中有一个 )
优采云 发布时间: 2022-03-16 12:25php禁止网页抓取(我另外一个博客中有一个
)
在我的另一个博客中,有一个我自己写的爬取其他网页的源代码。调试的时候没有问题,发布后一段时间内容也没有问题,但是突然发现爬取功能不起作用。现在,右键查看源文件,看到获取的数据是空的。
我重新检查了我的源代码并在服务器上调试了几次,甚至重新抓包查看对方的数据网站。
一开始以为是自己的服务器IP被对方服务器屏蔽了,于是把源码发给另外一个朋友调试,发现不是这个原因。
然后我怀疑对方是否更新了算法并加密了程序,但是我在获取数据的模块变量的源代码中做了回显输出,这才知道获取到的数据是乱码。
第一次看到乱码的时候,还以为是其他开发者加密了数据,所以放弃了几天。
今天尝试在源码中转换获取到的数据的字符集,但是怎么转换都出现乱码。
找了一天,终于找到了一个C#程序员写的idea。
原来问题出在我的 Post 的 header data header 中。我在源代码中添加了一行“Accept-Encoding: gzip, deflate, br”。删除后问题解决了,因为是gzip压缩导致的乱码。
$cars = $GLOBALS['ua'];
$header = array(
"POST {$ii} HTTP/2.0",
"Host: {$web} ",
"filename: {$id} ",
"Referer: {$ii} ",
"Content-Type: text/html",
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5,application/signed-exchange;v=b3',
'Accept-Encoding:gzip, deflate, br',
'Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection:keep-alive',
"Cookie: {$cars[1]}",
"User-Agent: {$cars[0]}",
"X-FORWARDED-FOR:180.149.134.142",
"CLIENT-IP:180.149.134.142",
);
echo "header: {$header[0]}
{$header[1]}
{$header[2]}
{$header[3]}
{$header[4]}
{$header[5]}
{$header[6]}
{$header[7]}
{$header[8]}
{$header[9]}
{$header[10]}
{$header[11]}
{$header[12]}
{$header[13]}
";
return $header;
删除以下行解决了问题。
'Accept-Encoding:gzip, deflate, br',