代理服务器通过代码示例学习Commons HTTPClient4组件的编程技术——使用代理服务器访问Web服务器

httpclient4  时间:2021-01-29  阅读:()

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

目录

1.1 使用代理服务器访问Web服务器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.1 相关的类和接口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.2 与代理服务器有关的功能实现代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

1.1.3 不带代理身份验证匿名代理的完整实现的代码示例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

1.1.4 带代理身份验证的代理服务器访问的方式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

杨教授工作室版权所有盗版必究 1/13页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1 使用代理服务器访问Web服务器

1. 1. 1相关的类和接口

1、代理服务器是位于客户端和Web服务器之间一个中间服务器

代理服务器Proxy Server是介于客户端和Web服务器之间的另一台服务器应用代理服务器之后浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求信号会先送到代理服务器 由代理服务器来取回浏览器所需要的信息并传送给相关的浏览器。

当然代理服务器为了提高对相同的URL地址访问的速度会将访问到得页面同时缓存到代理服务器的缓存中 以备下次客户端请求代理服务器的时候直接从代理服务器上取得要请求的资源而无需再次请求网站的Web服务器提高了响应速度。

2、在HttpC lient中使用代理服务器有关的各个类和接口Http Host

3、在HttpC lie nt中使用代理服务器有关的各个类和接口——封装HTTP参数的HttpP arams接口

1 HttpParams接口

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

它代表一个不可改变的值的集合定义一个组件在运行时行为。 HttpParams是为了包含简单的对象 integers 整型、 doubles 浮点型、 strings 字符串、 collections

集合和objects 对象等并且在运行时保持不变。

2 HttpParams接口代表一个对象集合该集合是一个“键-值”的Map映射集合

通过设置在HTTP客户端级别的共同所有的HTTP请求参数和选择性覆盖在HTTP请求级别的具体参数。

DefaultHttpClient httpclient = new DefaultHttpClient() ;httpclient.getParams() . setParameter(CoreProtocolPNames.PROTOCOL_VERSION,

HttpVersion.HTTP_1_0) ;httpclient.getParams() . setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,

"UTF-8") ;

4、区分HttpParams接口和HttpContext接口的不同

1 HttpParams适用于包含简单的对象

如integers 整型、 doubles 浮点型、 strings 字符串、 collections 集合和objects 对象等并且在运行时的值保持不变 HttpParams一般应用在“写一次读多次”的应用方式中。

2 HttpContext适用于包含复杂对象这些对象很可能在HTTP消息处理过程中发生变异。

3 HttpParams作用是定义其他组件的行为一般每个复杂的组件都有它自己的HttpParams对象。

4 HttpContext作用是代表了一个HTTP进程的执行状态。通常是相同的执行上下文之间共享许多合作对象。

5、在HttpC lient中使用代理服务器有关的各个类和接口——C orePro toco lPNames接口

1 CoreProtocolPNames接口的定义

2主要的参数

杨教授工作室版权所有盗版必究 3/13页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

6、 CoreProtoco lPName s接口内的各个参数的含义

1 HTTP_CONTENT_CHARSET Defines the charset to be used per default for encodingcontent body

2HTTP_ELEMENT_CHARSET Defines the charset to be used for encoding HTTP protocolelements

3 ORIGIN_SERVER Defines the content of the Server header

4 PROTOCOL_VERSION Defines the ProtocolVersion used per default

 5  STRICT_TRANSFER_ENCODING  Defines whether responses with an invalidTransfer-Encoding header should be rejected

6USE_EXPECT_CONTINUEActivates 'Expect: 100-Continue' handshake for the entityenclosing methods

7 USER_AGENT Defines the content of the User-Agent header

8 WAIT_FOR_CONTINUE Defines the maximum period of time in milliseconds theclient should spend waiting for a 100-continue response.

7、在HttpC lie nt中使用代理服务器有关的各个类和接口——C o nnRo utePNames接口和实现类C onnRo uteP ara ms

1 ConnRoutePNames接口的定义

杨教授工作室版权所有盗版必究 4/13页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

2 ConnRoutePNames接口的实现类ConnRouteParams

8、 ConnRoutePNames接口中的各个参数的含义

1DEFAULT_PROXY Parameter for the default proxy.

2 FORCED_ROUTE Parameter for an forced route.

3 LOCAL_ADDRESS Parameter for the local address.

9、 CoreProtocolPNames接口封装Http请求和协议有关的各种工作参数

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1.2与代理服务器有关的功能实现代码

1、实现的主要原理是应用HttpHost封装代理服务器的相关工作参数

应用HttpC lie nt组件实现通过代理服务器访问目标Web服务器的功能实现也比较简单只需要直接给定代理服务器的代理IP地址和端口。当然如果代理服务器需要验证客户端的身份信息则还需要给出相关的用户帐号和密码。

2、代码示例

HttpClient httpClient = new DefaultHttpClient() ;

/**下面的代码封装所需要访问的目标站点、端口和协议等方面的信息 */

HttpHost targetHost = new HttpHost("www.baidu.com", 80, "http") ;

/**下面的代码封装代理服务器的IP地址、端口和协议等方面的信息 */

HttpHost proxyHost = new HttpHost("192. 168. 1. 1",808, "http") ;

/**下面的代码是创建请求代理 */httpClient.getParams() . setParameter(ConnRoutePNames.DEFAULT_PROXY,proxyHost) ;

HttpGet oneGetMethod = new HttpGet("/") ;

HttpResponse httpResponse =httpClient. execute(targetHost,oneGetMethod) ;

1. 1.3不带代理身份验证匿名代理的完整实现的代码示例

由于很多代理服务器都提供有匿名代理的功能也就是不需要验证用户的身份信息。

1、下面的示例代码实现匿名代理的功能package com.px1987.httpclient;import java. io. IOException;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;

杨教授工作室版权所有盗版必究 6/13页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料import org.apache.http.conn.params.ConnRoutePNames;import org.apache.http. impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;public class WebBankAppclientThree {public WebBankAppclientThree() throws ClientProtocolException, IOException {

HttpClient httpClient = new DefaultHttpClient() ; //访问的目标站点端口和协议

HttpHost targetHost = new HttpHost("www.baidu.com", 80, "http") ;

HttpHost proxyHost = new HttpHost("192. 168. 1. 1",808, "http") ;

//代理的设置httpCli ent.getParams() . setParameter(ConnRoutePNames.DEFAULT_PROXY,proxyHost) ;httpClient.getParams() . setParameter(CoreProtocolPNames.PROTOCOL_VERSIO

N,

HttpVersion.HTTP_1_1) ;httpCli ent.getParams() . setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,

"GBK") ;

HttpGet oneGetMethod = new HttpGet("/") ;

HttpResponse httpResponse =httpClient.execute(targetHost,oneGetMethod) ;int httpStatusCode=httpResponse.getStatusLine() .getStatusCode() ;if(httpStatusCode==HttpStatus.SC_OK) {

System.out.println(httpResponse.getStatusLine() ) ;//打印服务器返回的状态

HttpEntity entity = httpResponse.getEntity() ;if (entity != null) {

System.out.println(EntityUtils. toString(entity) ) ; //打印返回的信息entity.consumeContent() ; //确保资源释放

杨教授工作室版权所有盗版必究 7/13页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

}

}else{

System.out.println("方法执行过程中出现了错误") ;//打印服务器返回的状态

}oneGetMethod.abort() ; //结束本次请求httpClient.getConnectionManager() . shutdown() ; ;//释放连接

}public static void main(String[] args) throws ClientProtocolException,IOException {

WebBankAppclientThree oneWebBankAppclient=new WebBankAppclientThree() ;

}

}

2、示例代码执行的结果

1. 1.4 带代理身份验证的代理服务器访问的方式

1、任何用户身份验证过程需要一套可以用来确定用户的身份凭据

杨教授工作室版权所有盗版必究 8/13页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1Http c lienr4组件中的身份凭据

在最简单的用户身份凭据可以只是一个“用户名/密码”对。 Httpclienr4组件采用UsernamePasswordCredentials代表了一个安全主体组成的凭据和一个明文密码和NTCredentials是一个Microsoft Windows的具体实现。

2应用UsernamePasswordCredentials的代码示例

UsernamePasswordCredentials oneUsernamePasswordCredentials =new UsernamePasswordCredentials("userName", "passWord") ;

System.out.println(oneUsernamePasswordCredentials.getUserPrincipal () .getName() ) ;

System.out.println(oneUsernamePasswordCredentials.getPassword() ) ;

3应用NTCredentials的代码示例

NTCredentials包括用户名/密码对增加一套windows特有的属性例如用户的域名微软Windows网络相同的用户可以属于多个域使用不同的认证设置。

NTCredentials oneNTCredentials =new NTCredentials("userName", "passWord", "主机名", "域名") ;

System.out.println(oneNTCredentials.getUserPrincipal () .getName() ) ;

System.out.println(oneNTCredentials.getPassword() ) ;

其中的“用户名”是不包含有域名的用户如不能为“域名/userName”而只能为用户名字符串。

2、Http clienr4组件中的凭证提供者Credentials Provider

HttpClient4组件采用接口CredentialsProvider表示凭证提供者或者凭据提供器默认的CredentialsProvider实现为BasicCredentialsProvider类该类是一个简单实现的java.util.HashMap集合。

3、设置和获得认证信息的代码示例

 1认证范围及设置的代码示例

访问者得身份验证登录信息保存在CredentialsProvider类的实例中可以通过setCredentia ls()和getCrede ntia ls()来设置或获取。而认证的范围可以包括主机名、端口号、领域名称和认证模式名称等类型 如果不需要指定某个方面的信息 可以采用AuthScope.ANY_HOST 任意主机或者AuthScope.ANY_PORT 任意端口、或者任意领域任意模式等通配符类型。

杨教授工作室版权所有盗版必究 9/13页

新网,域名7月盛夏1核心2G内存.COM域名仅19.9元/首年,主机9.9元/月,企业邮箱0元体验

新网好不好?新网域名便宜吗?新网怎么样?新网是国内老牌知名域名注册商,企业正规化运营,资质齐全,与阿里云万网和腾讯云DNSPOD同为国内服务商巨头。近日新网发布了最新的七月放价季优惠活动,主要针对域名、云主机、企业邮箱、SSL证书等多款云产品推送了超值的优惠,其中.com顶级域名仅19.9元/首年,.cn域名仅16元/首年,云主机1核心2G内存3Mbps带宽仅9.9元/月,企业邮箱更是免费送1年,...

Digital-VM:服务器,$80/月;挪威/丹麦英国/Digital-VM:日本/新加坡/digital-vm:日本VPS仅$2.4/月

digital-vm怎么样?digital-vm在今年1月份就新增了日本、新加坡独立服务器业务,但是不知为何,期间终止了销售日本服务器和新加坡服务器,今天无意中在webhostingtalk论坛看到Digital-VM在发日本和新加坡独立服务器销售信息。服务器硬件是 Supermicro、采用最新一代 Intel CPU、DDR4 RAM 和 Enterprise Samsung SSD内存,默认...

HostHatch(15美元)大硬盘VPS,香港NVMe,美国、英国、荷兰、印度、挪威、澳大利亚

HostHatch在当地时间7月30日发布了一系列的促销套餐,涉及亚洲和欧美的多个地区机房,最低年付15美元起,一次买2年还能免费升级双倍资源。商家成立于2011年,提供基于KVM架构的VPS主机,数据中心包括中国香港、美国、英国、荷兰、印度、挪威、澳大利亚等国家的十几个地区机房。官方网站:https://hosthatch.com/NVMe VPS(香港/悉尼)1 CPU core (12.5%...

httpclient4为你推荐
ddr2内存价格DDR1内存和DDR2内存为什么价钱差距那么大免费阅读小说app哪个好哪个手机小说app比较好用呢?压缩软件哪个好现在哪个压缩软件最稳定又快 ?苹果手机助手哪个好iphone有什么比较好用的软件!dnf魔枪士转职哪个好dnf魔枪士专职哪个看书软件哪个好手机阅读软件哪个好用?网络机顶盒哪个好现在网络机顶盒哪个牌子好?空间登录页面登录QQ空间时,如何使登陆界面不直接进入个人中心?dns服务器地址如何知道自己的IP地址和DNS服务器地址?dns服务器故障DNS服务解析故障 怎么办
万网域名证书查询 host1plus godaddy续费优惠码 typecho 元旦促销 最好的免费空间 免费美国空间 gtt 搜索引擎提交入口 丽萨 web应用服务器 西安主机 阿里云邮箱登陆 asp空间 网站防护 电信主机托管 沈阳idc htaccess server2008 卡巴斯基免费版 更多