我现在已经清楚这个socket closed是怎么出来的了:
我对HttpClient对象设置了代理,而这个代理的ip是动态的平均2秒一换,所以我POST数据之后从返回的InputStream读返回的内容时就会出错(因为POST时的ip和现在的ip不一样,所以socket也被关了)。我在想,用浏览器测试的时候在post的同时得到了返回信息,如何能用HttpClient模拟这种效果,即post的同时自己把我要的返回内容下载到本地,不用之后再用InputStream去读取了。求大牛帮忙~~感激不尽啊~!

解决方案 »

  1.   

    即便是用HttpClient,也是在POST的同时就得到了返回信息,这个过程是在一次TCP连接中完成的。所以感觉楼主的问题还并不清晰,另外可以看看HttpClient用的协议是HTTP1.0还是1.1,后者支持长连接中多次请求。
      

  2.   

    貌似不太是,那个返回的是一个inputStream,输入流的源应该是在服务器吧~~而如果我这边因为动态ip而使ip变化了,socket肯定断掉了,所以用inputStream读的时候会出错。(同时,用静态代理测试了,inputStream的read方法没有问题)
      

  3.   

    我的意思是,HttpClient的机制,跟浏览器本身是没有差异的。出现socket closed,即便是浏览器也要中招的,唯一可能的优势是浏览器的实现效率更高,所以在被切断之前就完成读取的可能性更高。
      

  4.   

    我总觉得这个事情比较玄幻,是不是换个思路,其实问题不是在HttpClient本身,而是动态代理或者是目标网站认为HttpClient不是标准浏览器,而是网络爬虫之类的东西,所以主动切断掉网络连接?因为我也是做网站的,之前针对网络爬虫做过这种专门的处理,因为有些爬虫写的很烂,大规模爬网搞得像DDOS攻击似的,会让整个网站很慢很慢。