使用HttpUrlConnection访问www.163.com遇到503问题,用设置代理加以解决
一次我使用如下程序连接到网易,意图获取其网站的html文本:
try {
String urlPath = "http://www.163.com/";
URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
File dir = new File("D:\\logs\\");
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, "163.txt");
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024 * 8];
int len = -1;
while ((len = inputStream.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
fos.close();
}else {
System.out.println("download file failed because responseCode="+responseCode);
}
} catch (Exception e) {
e.printStackTrace();
}
但是,实质性代码没有进去,而是进去了else分支,原因是返回码是503。
503是服务器未准备好的意思,但是我用浏览器访问网易是正常的,于是我想有以下可能:
1.网易采用了防爬机制,得在头信息里加入浏览器信息以绕过。
2.未必是网易给我返回的503,中途路由一样可以给我返回。
经测试后,发现头信息加入浏览器信息无效。
这时想浏览器里有代理设置,HttpUrlConnection没有代理怎么可以上网呢,于是在代码开头处加入了代理;
// SetProxy
System.setProperty("http.proxyHost", "pkg.proxy.prod.jp.local");
System.setProperty("http.proxyPort", "10080");
然后测试就顺利通过了。
下面是全部代码,供大家参考:
package urlconn; import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; public class DownloadFileTest {
public static void main(String[] args) {
try {
// SetProxy
System.setProperty("http.proxyHost", "pkg.proxy.prod.jp.local");
System.setProperty("http.proxyPort", "10080"); String urlPath = "http://www.163.com/"; URL url = new URL(urlPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
File dir = new File("D:\\logs\\");
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, "163.txt");
FileOutputStream fos = new FileOutputStream(file);
byte[] buf = new byte[1024 * 8];
int len = -1;
while ((len = inputStream.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
fos.close();
}else {
System.out.println("download file failed because responseCode="+responseCode);
} } catch (Exception e) {
e.printStackTrace();
}
}
}
--2020-03-03--
使用HttpUrlConnection访问www.163.com遇到503问题,用设置代理加以解决的更多相关文章
- vue访问外部接口设置代理,解决跨域(vue-cli3.0)
vue-cli3.0搭建的项目,平时访问内部接口配置了拦截器,今天需要调用天气预报的外部接口,发现跨域问题,通过配置代理解决. 1.在vue.config.js中配置代理 module.exports ...
- 访问网页时提示的503错误信息在IIS中怎么设置
访问网页时提示的503错误信息在IIS中怎么设置 503是一种常见的HTTP状态码,出现此提示信息的原因是由于临时的服务器维护或者过载,服务器当前无法处理请求则导致了访问网页时出现了503错误.那么当 ...
- java成神之——HttpURLConnection访问api
HttpURLConnection 访问get资源 访问post资源 访问Delete资源 获取状态码 结语 HttpURLConnection 访问get资源 HttpURLConnection c ...
- HttpUrlConnection访问Servlet进行数据传输
建立一个URL url = new URL("location"); 建立 httpurlconnection :HttpUrlConnection httpConn = (Htt ...
- HttpURLConnection访问网络
HttpURLConnection是一个抽象类,获取HttpURLConnection对象HttpURLConnection urlConnection=new URL(http://www.baid ...
- cxf设置代理访问webservice接口
由于业务上的需要,需要访问第三方提供的webservice接口,但由于公司做了对外访问的限制,不设置代理是不能外网的,如果使用http设置代理访问外网还是比较容易的,但使用cxf有点不知道从哪里入手. ...
- webservice axis2客户端设置代理方法(公司网络通过代理访问时)
webservice axis2客户端设置代理方法(公司网络通过代理访问时) UploadProcessInServiceStub stub = new UploadProcessInServic ...
- HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
原文地址:http://blog.csdn.net/cdefg198/article/details/8315438 万能框架:http://www.sufeinet.com/forum.php?mo ...
- crawler_java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件_设置代理
在工作中要用到android,然后进行网络请求的时候,打算使用httpClient. 总结一下httpClient的一些基本使用. 版本是4.2.2. 使用这个版本的过程中,百度很多,结果都是出现的o ...
随机推荐
- 谈谈对Java平台的理解
从我第一次接触Java的时候,老师就说"Write once,run anywhere",这句话虽然听起来有一点太过于形式主义,但是也突出了它的特点.那么,现在的我们应该总结一下和 ...
- GitHub 热点速览 Vol.32:VScode 韭菜基金插件,极大提高“工作”效率
作者:HelloGitHub-小鱼干 摘要:有什么比干着本职工作--编码,而又兼顾"外快"--炒股更有开心的事情呢?leek-fund 就是这么一个极大提升你工作幸福度和效率的插件 ...
- Spring Security 实战干货:实现自定义退出登录
文章目录 1. 前言 2. 我们使用 Spring Security 登录后都做了什么 2. 退出登录需要我们做什么 3. Spring Security 中的退出登录 3.1 LogoutFilte ...
- 国人开源了一款超好用的 Redis 客户端,真香!!
大家都知道,Redis Desktop Manager 是一款非常好用的 Redis 可视化客户端工具,但可惜的是 v0.9.4 版本之后需要收费了: 这个工具不再免费提供安装包了,要对所有安装包收费 ...
- ARM伪指令与伪操作
一.伪指令 ARM伪指令有四个,分别是LDR.ADR.ADRL和NOP,下边对其分别介绍. 1.1 LDR LDR 伪指令用于加载 32 位的立即数或一个地址值到指定寄存器 .形式如 LDR{con ...
- Jenkins配置总结
1.配置全局 系统管理->全局工具配置 2.配置 自己安装安装jdk,git,以及maven 3.系统管理->系统配置 3.1配置Jenkins URL 3.2 配置SSH Servers ...
- 【接口自动化】Python+Requests接口自动化测试框架搭建【二】
接续前文,在上篇博客中我们编写了demo.py代码,里面代码过多冗余,更新代码: #!/usr/bin/env python # coding=utf-8 import requests class ...
- WordCount of Software Engineering
1.Github项目地址:https://github.com/BayardM/WordCount 2.PSP表格(before): PSP2.1 Personal Software Process ...
- Java多线程_ReentrantLock
ReentrantLock是重入锁,它与synchronized很像,它是synchronized的加强版,因为它具有一些synchronized没有的功能.下面我们看看两者的区别:synchroni ...
- DevOps系列(2)-SonarQube之PostgreSQL
上一篇从整体上讲了下DevOps大概涉及到了哪些内容,以及主要工作流程,接下来我们将分步详细介绍各个部分的使用. 概览 首先从 SonarQube 开始说起,SonarQube 是一个可用于检测重复代 ...