httpclient写的httpUtil类,调用某个网站的https网址后, 请求发出后,没有响应。没有报错。
莫名其妙,抓包看了握手过程,没有问题。
--------------------- 苦恼了几天,毫无思路。 --------------------- 今天突然想到,何不用其他的工具试一试呢? 如果其他工具好使,证明是我程序的问题。 --------------------- 跑linux下,用wget直接弄,也是没反应。 -------------------- 用curl直接试也没反应,后来对照浏览器的header挨个试, 发现增加以下header就有反应了。
user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9
心想,有戏了
curl --tlsv1.2 --verbose --header "user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" --header "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" --header "accept-encoding: gzip, deflate, br" --header "accept-language: zh-CN,zh;q=0.9" --header "Connection: keep-alive" "https://www.xxx.com/en/hk/"
------------------------ 修改java代码,增加以上header,没反应,头大~ ------------------------ 查看抓包,发现发出请求时,多了一个header: Connection: Keep-Alive 这个通常是没问题的,不过死马当活马医。 在curl里加了这个header,果然马上没反应了。 看来,这个就是罪魁祸首 后来发现,用Connection: keep-alive是有反应的(注意小写) ------------------------- 发现Connection这个header是httpclient自动加的,折腾半天去不掉。 尝试Connection:close也没反应。 ------------------------- 无奈,不用httpclient了,用HttpUrlConnection自己写吧, 果然OK了。 再处理一下gzip解压,妥妥的~
|