client是httpclient的实例,设置代理的代码
来源:互联网 发布:软件制作流程 编辑:程序博客网 时间:2024/04/27 19:48
client是httpclient的实例,设置代理的代码如下:
client.getHostConfiguration().setProxy(ip, port);
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
client.getParams().setIntParameter(HttpClientParams.MAX_REDIRECTS, 5);
NTCredentials defaultcreds = new NTCredentials(userName, password,ip,field==null?"":field);
client.getState().setProxyCredentials(new AuthScope(ip, port, field), defaultcreds);
若认证方案为Basic,可以成功。头部信息会有Proxy-Authorization: Basic enh6Onp4eg==
若认证方案为NTLM,就失败。
不知道为什么在请求的头部一直都不添加认证信息,只有个Proxy-Connection: Keep-Alive,没有Proxy-Authorization:的头部信息。
ip, port,userName, password都不是空的。httpclient的版本是3.1的。
下面是一段日志信息:
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpMethodDirector] enter HttpMethodBase.processAuthenticationResponse(HttpState, HttpConnection)
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.auth.AuthChallengeProcessor] Supported authentication schemes in the order of preference: [ntlm, digest, basic]
2008-12-25 09:37:47 INFO [org.apache.commons.httpclient.auth.AuthChallengeProcessor] ntlm authentication scheme selected
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.auth.AuthChallengeProcessor] Using authentication scheme: ntlm
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.auth.AuthChallengeProcessor] Authorization challenge processed
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpMethodDirector] Proxy authentication scope: NTLM <any realm>@192.168.2.3:8080
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpState] enter HttpState.getProxyCredentials(AuthScope)
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpMethodDirector] Retry authentication
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpMethodBase] Resorting to protocol version default close connection policy
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpMethodBase] Should NOT close connection, using HTTP/1.1
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpConnection] enter HttpConnection.isResponseAvailable()
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpConnection] enter HttpConnection.releaseConnection()
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpConnection] Connection is locked. Call to releaseConnection() ignored.
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpMethodDirector] Authenticating with NTLM <any realm>@192.168.2.3:8080
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpState] enter HttpState.getProxyCredentials(AuthScope)
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.auth.NTLMScheme] enter NTLMScheme.authenticate(Credentials, HttpMethod)
2008-12-25 09:37:47 DEBUG [org.apache.commons.httpclient.HttpConnection] enter HttpConnection.releaseConnection()
正常情况下应该在enter NTLMScheme.authenticate(Credentials, HttpMethod)后再执行HttpMethodBase.addRequestHeader(Header)
但是没有,而是enter HttpConnection.releaseConnection()。
请大家帮帮忙阿,谢谢阿!急!!!
主要是设置http头
在HostConfiguration.setProxy里设置。如下面代码:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class HttpClientUse {
public static void main(String[] args) throws HttpException, IOException {
HttpClient httpClient = new HttpClient();
httpClient.getHostConfiguration().setProxy("localhost", 808);
/*//需要验证
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("chenlb", "123456");
httpClient.getState().setProxyCredentials(AuthScope.ANY, creds);
*/
//设置http头
List <Header> headers = new ArrayList <Header>();
headers.add(new Header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"));
httpClient.getHostConfiguration().getParams().setParameter("http.default-headers", headers);
GetMethod method = new GetMethod("http://www.baidu.com");
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
int statusCode = httpClient.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.out.println("Method failed code="+statusCode+": " + method.getStatusLine());
} else {
System.out.println(new String(method.getResponseBody(), "gb2312"));
}
} finally {
method.releaseConnection();
}
}
}
如果要用户名与密码验证的,请把/* */注释去掉。使验证有效。
验证,关键是:
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("chenlb", "123456");
httpClient.getState().setProxyCredentials(AuthScope.ANY, creds);
设置http请求头.
List <Header> headers = new ArrayList <Header>();
headers.add(new Header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"));
httpClient.getHostConfiguration().getParams().setParameter("http.default-headers", headers);
发表于:2008-12-26 13:08:202楼 得分:0
认证方案为Basic,可以成功。是在我本机测的,用的代理服务器软件.
然后把程序给其他的人,其他人的代理服务器认证方案是NTLM的,不知道为什么不成功
哦,谢谢。
不过若认证方案是NTLM的不能用UsernamePasswordCredentials,而必须要用NTCredentials实例。
NTCredentials实例我已经创建好了,且设置了setProxyCredentials。
若是代理认证,httpclient会自己添加代理认证头部信息。自己添加不好实现,因为需要用到几种编码转化。
- client是httpclient的实例,设置代理的代码
- HttpClient设置代理的请求
- 基于HttpClient的代理配置实例
- 设置代码的代理
- HttpClient的使用实例
- httpClient如何设置代理
- 【Java】设置HttpClient代理
- HttpClient设置代理
- httpClient设置代理
- 读取iOS代理设置的代码
- 读取iOS代理设置的代码
- 读取iOS代理设置的代码
- 读取iOS代理设置的代码
- HttpClient的retry设置
- 实例HttpClient (使用代理)
- org.apache.http.client.HttpClient和org.apache.commons.httpclient.HttpClient的区别
- HttpComponents(Apache HttpComponents Client 4.1.3)通过代理访问网页的设置方法
- HttpClient设置超时和代理
- 虚拟产业集群平台上线
- Java编程那些事儿3——你适合学习程序设计吗?
- Java编程那些事儿4——如何学好程序设计?
- 一个创建服务的类
- Java编程那些事儿5——程序设计介绍小结
- client是httpclient的实例,设置代理的代码
- 谷歌将要预测流感:一桩曝光隐私的好事?
- BPS(Barcode Positioning System)条码定位系统
- 混混沉睡混混沉睡
- 钩子啊钩子
- 解决麦克风声音小的方法
- 苏格拉底 柏拉图
- 如何添加自定义系统菜单
- 软件工程