用httpclient4读取返回内容时遇到socket closed的问题。

judking 2012-01-06 11:00:17
我现在已经清楚这个socket closed是怎么出来的了:
我对HttpClient对象设置了代理,而这个代理的ip是动态的平均2秒一换,所以我POST数据之后从返回的InputStream读返回的内容时就会出错(因为POST时的ip和现在的ip不一样,所以socket也被关了)。我在想,用浏览器测试的时候在post的同时得到了返回信息,如何能用HttpClient模拟这种效果,即post的同时自己把我要的返回内容下载到本地,不用之后再用InputStream去读取了。求大牛帮忙~~感激不尽啊~!
...全文
465 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-01-07
  • 打赏
  • 举报
回复
我总觉得这个事情比较玄幻,是不是换个思路,其实问题不是在HttpClient本身,而是动态代理或者是目标网站认为HttpClient不是标准浏览器,而是网络爬虫之类的东西,所以主动切断掉网络连接?

因为我也是做网站的,之前针对网络爬虫做过这种专门的处理,因为有些爬虫写的很烂,大规模爬网搞得像DDOS攻击似的,会让整个网站很慢很慢。
judking 2012-01-06
  • 打赏
  • 举报
回复
那我应该怎么办呢?有没有什么好的方法呢?

[Quote=引用 3 楼 ldh911 的回复:]
我的意思是,HttpClient的机制,跟浏览器本身是没有差异的。出现socket closed,即便是浏览器也要中招的,唯一可能的优势是浏览器的实现效率更高,所以在被切断之前就完成读取的可能性更高。
[/Quote]
MiceRice 2012-01-06
  • 打赏
  • 举报
回复
我的意思是,HttpClient的机制,跟浏览器本身是没有差异的。出现socket closed,即便是浏览器也要中招的,唯一可能的优势是浏览器的实现效率更高,所以在被切断之前就完成读取的可能性更高。
judking 2012-01-06
  • 打赏
  • 举报
回复
貌似不太是,那个返回的是一个inputStream,输入流的源应该是在服务器吧~~而如果我这边因为动态ip而使ip变化了,socket肯定断掉了,所以用inputStream读的时候会出错。

(同时,用静态代理测试了,inputStream的read方法没有问题)

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

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

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧