如何使用 代理下载文件(HttpClient)?

Inszt 发布于 2016/05/12 15:15
阅读 360
收藏 0

httpClient 使用 代理 获取网页 没有问题,代码 类似于


HttpClient client = new HttpClient(mcm);
.....
//设置代理
client.getHostConfiguration().setProxy(proxy_ip, proxy_port);
...

client.executeMethod(getMethod);
.....
InputStream in = getMethod.getResponseBodyAsStream();

BufferedReader br = new BufferedReader(new InputStreamReader(in, charset));
 String tempbf;
 htmlBuffer = new StringBuffer(100);
 while ((tempbf = br.readLine()) != null) {
     htmlBuffer.append(tempbf + "\n");
 }
 htmlTxt = htmlBuffer.toString();

return htmlTxt;


。。

设置好代理后,如果代理ip有效的话,测试使用ip138,可以看到返回的 ip变化了。

并且 如果有被封了 ip的网站,再次抓取也可以了。

这块没问题了


但是 如果想使用  代理 下载文件 就不行了。。。

直接返回404...

从 http的原理上来说 ,都是open 连接,然后接收输出的流;上面的代码 变化的就是 接收的 输出流  由字符流  改为 FIleOutputStream 

out = new FileOutputStream(new File(localPath));


			byte[] b = new byte[BUFFER];
			int len = 0;
			while ((len = in.read(b)) != -1) {
				out.write(b, 0, len);
			}



并且  写入到 文件而已,那应该 也没问题啊—当然,如果不设置代理,下载 也是 成功的。。。


可是 试了 几次,相同的ip 获取网页可以,但是 下载文件 就不行了。。


为什么呢?


文件地址 也是 很 明确的文件名 结尾的,放在浏览器都可以直接打开的 比如: http://www.aaa.com/aa/bb/c.pdf





我又试了几次,出现的情况有:

有的ip 文件大直接返回 404,而文件小的话 比如 十几k的图片,还是有可能成功的。

有的ip 文件大或小都可以连接 并下载,但是 文件大小 明显不够,几M的文件 只有1k-几十K,基本算下载失败。


而实际上 几十K的文件 都无法下载的时候,几百K的 网页 却正常获取。



加载中
返回顶部
顶部