1 防火墙问题
2 编码问题,指定下编码
3 有条件的话到代理服务那里 , tcpDump一下,看看数据包是否正确完整。
4 代理服务器的 对这些方法的处理GET, HEAD, POST, TRACE, DELETE, PUT是否支持
5 超时的问题。帮你看了下源代码
ret = b[0] == 'H' && b[1] == 'T'
696 && b[2] == 'T' && b[3] == 'P' && b[4] == '/' &&
697 b[5] == '1' && b[6] == '.';
698 serverInput.reset();
699 if (ret) {
}
else if (nread != 8) {
754 if (!failedOnce && requests != null) {
755 if (httpuc.getRequestMethod().equals("POST") && !retryPostProp) {
756 // do not retry the request
757 } else {
758 failedOnce = true;
759 closeServer();
760 cachedHttpClient = false;
761 openServer();
762 if (needsTunneling()) {
763 httpuc.doTunneling();
764 }
765 afterConnect();
766 writeRequests(requests, poster);
767 return parseHTTP(responses, pi, httpuc);
768 }
769 }
770 throw new SocketException("Unexpected end of file from server");
}
大致意思了 ,你从代理服务器的response 的第一行不是标准的8个字符HTTP/1.1 200 OK 或者是 HTTP/1.0 200 OK
你自己查一下吧,为什么代理服务器返回的不是以上的信息。
自己 找到本地连接端口 ,dump一下看看
2 编码问题,指定下编码
3 有条件的话到代理服务那里 , tcpDump一下,看看数据包是否正确完整。
4 代理服务器的 对这些方法的处理GET, HEAD, POST, TRACE, DELETE, PUT是否支持
5 超时的问题。帮你看了下源代码
ret = b[0] == 'H' && b[1] == 'T'
696 && b[2] == 'T' && b[3] == 'P' && b[4] == '/' &&
697 b[5] == '1' && b[6] == '.';
698 serverInput.reset();
699 if (ret) {
}
else if (nread != 8) {
754 if (!failedOnce && requests != null) {
755 if (httpuc.getRequestMethod().equals("POST") && !retryPostProp) {
756 // do not retry the request
757 } else {
758 failedOnce = true;
759 closeServer();
760 cachedHttpClient = false;
761 openServer();
762 if (needsTunneling()) {
763 httpuc.doTunneling();
764 }
765 afterConnect();
766 writeRequests(requests, poster);
767 return parseHTTP(responses, pi, httpuc);
768 }
769 }
770 throw new SocketException("Unexpected end of file from server");
}
大致意思了 ,你从代理服务器的response 的第一行不是标准的8个字符HTTP/1.1 200 OK 或者是 HTTP/1.0 200 OK
你自己查一下吧,为什么代理服务器返回的不是以上的信息。
自己 找到本地连接端口 ,dump一下看看
如果有打印,猜测会不会是编码的问题?看异常信息提示GBK什么的,而你源码里用的是"UTF-8",换下试试呢。
不好意思,给的异常里的那个GBK是我的代码打印出来的。
这句:System.out.println(Charset.defaultCharset().name());// 看默认Charset是什么发帖的时候,忘记删了。不好意思
请问一下,应当如何dump response的信息?有什么工具或方法么?
请问一下,应当如何dump response的信息?有什么工具或方法么?
1 linux 机器tcpdump 命令可以看。
2 windows 上面的话,可以下载sun.net.www.http.HttpClient这部分的源代码,然后自己断电设置在我帮你看源码的地方,调试一下,看看response到底是什么。winSockExpert,好像也可以试试。
然后输出了百度的源码<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><link rel="dns-prefetch" href="//s1.bdstatic.com"/><link rel="dns-prefetch" href="//t1.baidu.com"/><link rel="dns-prefetch" href="//t2.baidu.com"/><link rel="dns-prefetch" href="//t3.baidu.com"/><link rel="dns-prefetch" href="//t10.baidu.com"/><link rel="...................................................