■出现问题的原因推测

被反爬了,缺少了cookie,你请求出来的信息就是运行一段js,

生成cookie,看到args1了么,这个是密钥,下面的也不是编码的,就是js混淆的问题

防爬网站需要携带一些基础http头模拟成浏览器登录

https://www.jianshu.com/p/401a25134b89

前言

以下代码运行的返回值

■代码

package com.sxz.timecontroal;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.zip.GZIPInputStream;import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;public class CheckTimeWithNet {static final String LOGINURL     = "https://blog.csdn.net/sxzlc/article/list/3";public static void main(final String[] args) {final DefaultHttpClient httpclient = new DefaultHttpClient();final HttpGet httpGet = new HttpGet(LOGINURL);HttpResponse response = null;try {httpGet.addHeader("Accept-Encoding", "gzip, deflate"); response = httpclient.execute(httpGet); } catch (final ClientProtocolException cpException) {} catch (final IOException ioException) {}// verify response is HTTP OKfinal int statusCode = response.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {System.out.println("Error authenticating to Force.com: "+statusCode);return;}System.out.println("---------------------Status code Info Start---------------------");System.out.println(response.getStatusLine());System.out.println("---------------------Status code Info end  ---------------------");System.out.println("---------------------Head Info Start---------------------");final Header[] hs = response.getAllHeaders();for(final Header h:hs){System.out.println(h.getName() + ":" + h.getValue());}System.out.println("---------------------Head Info End  ---------------------");String getResult = null;try {// response.setEntity(new GzipDecompressingEntity(response.getEntity())); // getResult = EntityUtils.toString(response.getEntity(),"UTF-8");getResult = getStringFromResponseUzip(response);} catch (final Exception ioException) {// Handle system IO exception}System.out.println(getResult);}public static String getStringFromResponseUzip(final HttpResponse response) throws Exception {if (response == null) {return null;}String responseText = "";//InputStream in = response.getEntity().getContent();final InputStream in = response.getEntity().getContent();final Header[] headers = response.getHeaders("Content-Encoding");for(final Header h : headers){System.out.println(h.getValue());if(h.getValue().indexOf("gzip") > -1){//For GZip responsetry{final GZIPInputStream gzin = new GZIPInputStream(in);final InputStreamReader isr = new InputStreamReader(gzin,"UTF-8");responseText = getStringFromStream(isr);//responseText = URLDecoder.decode(responseText, "utf-8");}catch (final IOException exception){exception.printStackTrace();}return responseText;}}responseText = EntityUtils.toString(response.getEntity(),"utf-8");return responseText;}public static String getStringFromStream(final InputStreamReader isr) throws Exception{final BufferedReader br = new BufferedReader(isr);final StringBuilder sb = new StringBuilder();String tmp;while((tmp = br.readLine())!=null){sb.append(tmp);sb.append("\r\n");}br.close();isr.close();return sb.toString();}
}

■运行结果

---------------------Status code Info Start---------------------
HTTP/1.1 200 OK
---------------------Status code Info end  ---------------------
---------------------Head Info Start---------------------
Server:Tengine
Date:Sat, 07 Dec 2019 12:20:38 GMT
Content-Type:text/html; charset=utf-8
Transfer-Encoding:chunked
Connection:keep-alive
Set-Cookie:acw_tc=2760820215757212385795097e52a909ebbcda96b20e30f4c216c0bfbc89e6;path=/;HttpOnly;Max-Age=2678401
Content-Encoding:gzip
cache-control:no-cache, no-store
Pragma:no-cache
Strict-Transport-Security:max-age=86400
---------------------Head Info End  ---------------------
gzip
<html><script>
var arg1='70EBF8B68AD7946E52DB795B887AEDFC88D2C6E3';
var _0x4818=['\x63\x73\x4b\x48\x77\x71\x4d\x49',

。。。

();try{return!!window['\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];}catch(_0x35538d){return![];}}()){document[_0x55f3('0x33', '\x56\x25\x59\x52')](_0x55f3('0x34', '\x79\x41\x70\x7a'),l,![]);}else{document[_0x55f3('0x36', '\x79\x41\x70\x7a')](_0x55f3('0x37', '\x4c\x24\x28\x44'),l);}_0x4db1c();setInterval(function(){_0x4db1c();},0xfa0);

function setCookie(name,value){var expiredate=new Date();expiredate.setTime(expiredate.getTime()+(3600*1000));document.cookie=name+"="+value+";expires="+expiredate.toGMTString()+";max-age=3600;path=/";}
function reload(x) {setCookie("acw_sc__v2", x);document.location.reload();}
</script></html>

■后续

解压后为16进制代码,有待解决。。。

\x65 z

这是 URLENCODE造成的,使用URLDECODE解决

感谢,[gybao]大神的帮助

https://bbs.csdn.net/topics/395274030

但是,没有使用URLDECODE,之前的代码,在运行一下,竟然直接成功了。

但是,我之前是怎么跑出这种效果的,原因不明。。。 推测问题的原因在下面记述

■再次修改后的代码

对于目前最新代码的说明

当能进入到下面79行的分支中时,不论有没有85行都不会出现乱码问题。

代码

package com.sxz.timecontroal;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.zip.GZIPInputStream;import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;public class CheckTimeWithNet {//static final String LOGINURL     = "https://blog.csdn.net/sxzlc?orderby=ViewCount";static final String LOGINURL     = "https://blog.csdn.net/sxzlc/article/list/2?orderby=ViewCount";public static void main(final String[] args) {final DefaultHttpClient httpclient = new DefaultHttpClient();final HttpGet httpGet = new HttpGet(LOGINURL);HttpResponse response = null;try {httpGet.addHeader("Accept-Encoding", "gzip, deflate"); response = httpclient.execute(httpGet); } catch (final ClientProtocolException cpException) {} catch (final IOException ioException) {}// verify response is HTTP OKfinal int statusCode = response.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {System.out.println("Error authenticating to Force.com: "+statusCode);return;}System.out.println("---------------------Status code Info Start---------------------");System.out.println(response.getStatusLine());System.out.println("---------------------Status code Info end  ---------------------");System.out.println("---------------------Head Info Start---------------------");final Header[] hs = response.getAllHeaders();for(final Header h:hs){System.out.println(h.getName() + ":" + h.getValue());}System.out.println("---------------------Head Info End  ---------------------");String getResult = null;try {// response.setEntity(new GzipDecompressingEntity(response.getEntity())); // getResult = EntityUtils.toString(response.getEntity(),"UTF-8");getResult = getStringFromResponseUzip(response);} catch (final Exception ioException) {// Handle system IO exception}System.out.println(getResult);}public static String getStringFromResponseUzip(final HttpResponse response) throws Exception {if (response == null) {return null;}String responseText = "";//InputStream in = response.getEntity().getContent();final InputStream in = response.getEntity().getContent();final Header[] headers = response.getHeaders("Content-Encoding");for(final Header h : headers){System.out.println(h.getValue());if(h.getValue().indexOf("gzip") > -1){//For GZip responsetry{final GZIPInputStream gzin = new GZIPInputStream(in);final InputStreamReader isr = new InputStreamReader(gzin,"UTF-8");responseText = getStringFromStream(isr);responseText = URLDecoder.decode(responseText, "UTF-8");}catch (final IOException exception){exception.printStackTrace();}System.out.println("---------------------is gzip---------------------");return responseText;}}System.out.println("---------------------is not gzip---------------------");responseText = EntityUtils.toString(response.getEntity(),"utf-8");return responseText;}public static String getStringFromStream(final InputStreamReader isr) throws Exception{final BufferedReader br = new BufferedReader(isr);final StringBuilder sb = new StringBuilder();String tmp;while((tmp = br.readLine())!=null){sb.append(tmp);sb.append("\r\n");}br.close();isr.close();return sb.toString();}
}

以上代码运行后的结果

如果Get不设定gzip是,

---

推测出现问题的原因:

-------------------------------------------------------

■原因推测

还是网站那边做了什么特殊的处理

上午之所以好用,是因为网站那边返回的结果没有进行 gzip压缩,

而下午请求同样的地址,经过了gzip压缩,所以在解析处理的时候,无法正常解析。

■现象1

下午再次同样的运行代码,又出现了乱码的问题,

加上DECODE也没有用(以下88,87行),估计解码时出现问题,直接返回NULL了

现象2

上午再cmd 窗口中,使用CURL 上面的地址

可以返回页面的HTML,下午就不行了,返回效果如下。

■关于URLEncode的确认

上面的乱码抽取了一部分,确定是URL编码,但是在解码全部字符串的时候,返回值为NULL

■补充说明

而且,感觉乱码是,返回的信息,和上午返回所有的页面HTML代码相比较,少了很多!

-------------------------------------------------------

■后续(结果说明1)

关于一会儿是 gzip, 一会儿不是,

原因推测是,因为负载平衡,每次访问的服务器不一样。

基于 Nginx 的两个版本(Openresty和Tengine)

・gzip的server信息 Tengine

------------------------------------

------------------------------------

・不是gzip时的server信息

------------------------------------

TODO

------------------------------------

----

---

Httpclient gzip 乱码问题解决相关推荐

  1. HttpClient上传文件到微信素材乱码问题解决

    在开发微信第三方公众平台的时候,需要上传图片.语音等文件到微信服务器.当文件名存在中文时会出现乱码.网上搜了一大堆文章,大部讲什么设置编码啥的,放到微信素材上传这个场景就是用不了,试了各种方式,依然是 ...

  2. java accept encoding_Accept-Encoding gzip 乱码 和Okhttp的解决方法

    在使用okhttp请求服务器数据的时候,发现返回的数据一直都是乱码,但是使用fiddler抓包,decode后,可以正常显示.刚开始一直怀疑是编码的问题,后来对比了hex的数据和程序中乱码的二进制,发 ...

  3. php 和mysql中文乱码问题,常见php与mysql中文乱码问题解决办法

    常见php与mysql中文乱码问题解决办法 乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了?号. 症状:用PHPmyAdmin输 ...

  4. python php 通信,Python和php通信乱码问题解决方法

    Python和php通信乱码问题解决方法 发布于 2014-07-29 22:28:21 | 118 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertex ...

  5. springMVC保存数据到mysql数据库中文乱码问题解决方法

    springMVC保存数据到mysql数据库中文乱码问题解决方法 参考文章: (1)springMVC保存数据到mysql数据库中文乱码问题解决方法 (2)https://www.cnblogs.co ...

  6. java执行cmd命令,返回结果中文乱码问题解决

    java执行cmd命令,返回结果中文乱码问题解决 参考文章: (1)java执行cmd命令,返回结果中文乱码问题解决 (2)https://www.cnblogs.com/kwaitfort/p/90 ...

  7. Zip文件中文乱码问题解决方法(MAC->Windows)

    Zip文件中文乱码问题解决方法(MAC->Windows) 参考文章: (1)Zip文件中文乱码问题解决方法(MAC->Windows) (2)https://www.cnblogs.co ...

  8. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...

  9. python3 库pandas写入csv格式文件出现中文乱码问题解决方法

    python3 库pandas写入csv格式文件出现中文乱码问题解决方法 参考文章: (1)python3 库pandas写入csv格式文件出现中文乱码问题解决方法 (2)https://www.cn ...

最新文章

  1. 在IIS上安装 thinkphp的方法
  2. KMP字符串模式匹配详解
  3. buu Unencode
  4. 输入 vscode_【Python技术入门2】Python集成开发环境VSCode搭建
  5. PHP中获取数组中单列的值
  6. Key-Value Coding (KVC)
  7. t3网络计算机浏览卡死,用友T3软件营改增界面关不了,电脑死机,总账用不了怎么办?...
  8. connection对象的参数
  9. Unity与安卓开发的一些路径知识
  10. 2021华为软挑赛题_思路分析——实时更新,做多少更多少(八)
  11. Java面试--Structs
  12. 大麦DW33D路由器假死
  13. 计算机绘图综合训练大题,工程制图与计算机绘图综合实训报告汇编.doc
  14. selenium基础自学七(获取超链接)
  15. 数据分析 --- 如何收集数据
  16. 【路径规划】基于粒子群算法机器人避障路径规划matlab代码
  17. 七月三日服务器维护,7月3日全部服务器更新维护公告
  18. elementUI表格中气泡位置偏移
  19. Ubuntu安装“启动引导器”的设备选哪一项,选默认还是选/boot分区?
  20. 使用SQL和Pandas计算累计百分比

热门文章

  1. jvm 堆外内存_jvm┃java内存区域,跳槽大厂必会知识点
  2. java按年月季度统计折线图_拆线图按年、按月,按天统计,前端传时间只要起始时间与结束时间...
  3. rmmod无法卸载驱动_从hello world到LED驱动
  4. 将一个对象相同的属性(不区分大小写)赋值给一个新对象 DataTable的一个简单的扩展...
  5. Office 365 On MacOS 系列——安装 O365 其他组件
  6. angular4 浏览器兼容
  7. 最全的spark基础知识解答
  8. 韦诺之战wesnoth没有声音
  9. nginx的指令root和alias的区别
  10. cocoachina上很酷的帖子