HttpClient的BUG
以为解决完URL中编码的问题StreamSpider爬虫之中文URL编码 之后就不用再考虑中文的问题了,然而现实是填完一个坑又有一个新的坑在等着我。
偶然发现程序无法处理含有中文的301跳转,例如 http://tzb.hit.edu.cn/全国政协办公厅
经过301跳转后会404。一顿找原因、debug。
原因
我的理解是: http头信息是用 ISO-8859-1
编码的,而HttpClient则默认用utf8解码,这个不一致导致了得到的重定向地址并不正确。
解决方案
既然HttpClient不能正确处理编码,那我们就自己抓头部Location,然后转换成正确的编码,再让HttpClient去抓取新的url。
示例代码
自动重定向
取消HttpClient的自动重定向,自己处理
1 | HttpClient httpClient = HttpClientBuilder.create() |
转换编码
将 ISO-8859-1 编码的网址转换为 utf8编码
1 | if(statusCode==301 || statusCode ==302){ |
完整代码见:httpclient/redirect