使用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 ...
随机推荐
- 前端面试 vue 部分 (5)——VUE组件之间通信的方式有哪些
VUE组件之间通信的方式有哪些(SSS) 常见使用场景可以分为三类: 父子通信: null 父向子传递数据是通过 props ,子向父是通过 $emit / $on $emit / $bus Vuex ...
- JavaIO流,万物皆文件
引入IO的原因 基本概念: 数据源和流的概念 IO流的概念细分 IO流的体系 IO流在Java中的流对象:inputStream .... Java对象的序列化和反序列化: 1 为什么需要序列化和反序 ...
- Codechef May Challenge 2020 Division 1 记录
目录 Triple Sort Sorting Vases Buying a New String Chef and Bitwise Product Binary Land Not a Real Wor ...
- 【模式识别与机器学习】——3.5Fisher线性判别
---恢复内容开始--- 出发点 应用统计方法解决模式识别问题时,一再碰到的问题之一就是维数问题. 在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通. 因此,降低维数有时就会成为处理实际 ...
- mysql的ATM存取款机系统
##建库 CREATE DATABASE bankDB; ##客户信息表 CREATE TABLE userInfo ( customerID INT PRIMARY KEY AUTO_INCREME ...
- python设计模式之责任链模式
python设计模式之责任链模式 开发一个应用时,多数时候我们都能预先知道哪个方法能处理某个特定请求.然而,情况并非总是如此.例如,想想任意一种广播计算机网络,例如最早的以太网实现.在广播计算机网络中 ...
- POJ2806 Square
题目描述 给定\(2*1\)和\(2 * 2\)两种规格的地砖,请问\(2 * n\)的地面总共有多少种方法? 下面是铺满\(2*17\)的地面的示意图. 输入输出格式 输入 多组数据,每组数据包括1 ...
- Ubuntu 18.04 安装配置 java jdk
1.下载 下载 jdk 到 Downloands 文件夹下 cd 进入 /usr/local, 创建 jdk 文件夹, 然后 cd 进这个文件夹 cd /usr/local sudo mkdir jd ...
- myBatis源码解析-配置文件解析(6)
前言 本来打算此次写一篇关于SqlSession的解析,但发现SqlSession涉及的知识太多.所以先结合mybatis配置文件(我们项目中常写的如mybatisConfig.xml),来分析下my ...
- Airtest操作多台云手机,进行分发,多个脚本后端调度
一.核心重点 使用python后端框架:tornado 调度:redis队列 存手机的class_name采取头取尾曾 多台手机连接方式 connect_device(f"Android:/ ...