原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/3903.html
我另外一个博客中有一个我自己写的抓取其他网页页面的源码,之前在调试的时候没有问题,发布后的一段时间内容也没有什么问题,但突然之间我发现抓取功能不起作用了,右键查看源文件里看到获取的数据是空的。
我重新查看了我的源代码,并在服务器上进行了好几次的调试,甚至我重新抓包查看了对方网站数据。
刚开始的时候我以为是我服务器IP被对方服务器封了,所以我将源代码发给我另外一个朋友进行了调试,发现不是这个原因。
接着我怀疑会不会是对方更新了算法,对程序进行了加密,但我在源码里对获取数据的模块变量做了一个echo输出,才知道,获取到的数据是乱码的。
刚开始看到乱码的时候,我以为是对方开发人员对数据进行加密了,所以我放弃了几天。
今天,我尝试着在源代码里对获取的数据进行字符集转换,但无论怎么转换,得到的都是乱码。
搜索了一天,终于在一个C#程序员写的一个思路才赫然开朗。
原来问题出在我Post的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]}<br>{$header[1]}<br>{$header[2]}<br>{$header[3]}<br>{$header[4]}<br>{$header[5]}<br>{$header[6]}<br>{$header[7]}<br>{$header[8]}<br>{$header[9]}<br>{$header[10]}<br>{$header[11]}<br>{$header[12]}<br>{$header[13]}<br>"; return $header;
删除以下这一行问题就解决了。
'Accept-Encoding:gzip, deflate, br',
sicnature ---------------------------------------------------------------------
I P 地 址: 18.97.14.90
区 域 位 置: 美国马萨诸塞
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source http://www.myzhenai.com/post/3903.html
没有评论