`

HttpClient4.X的代理密码

    博客分类:
  • J2EE
 
阅读更多
HttpClient4.X的代理添加实现(转自http://blog.csdn.net/hblfyla/article/details/54962898)
package org.yla.test;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;

public class HttpClientTest {
    String url = "xxxxxxxxxxxxxxxxxxxxxxxxx";
    String ip = "202.107.233.85";
    int port = 8080;
    String username = "";
    String password = "";

    /**
     * 使用HttpClient4实现代理 202.107.233.85 8080
     *
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        HttpClientBuilder build = HttpClients.custom();
        HttpHost proxy = new HttpHost(ip, port);
        CloseableHttpClient client = build.setProxy(proxy).build();
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        System.out.println(EntityUtils.toString(entity));
    }

    /**
     * 使用httpclient3实现代理
     *
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        HttpClient httpClient = new HttpClient();
        httpClient.getHostConfiguration().setProxy(ip, port);
        GetMethod method = new GetMethod(url);
        httpClient.executeMethod(method);
        String result = new String(method.getResponseBody());
        System.out.println(result);
    }

    /**
     * 使用httpclient4实现代理(带密码的代理)
     *
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {
        HttpClientBuilder build = HttpClients.custom();
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        AuthScope authscope = new AuthScope(ip, port);
        Credentials credentials = new UsernamePasswordCredentials(username,
                password);
        credentialsProvider.setCredentials(authscope, credentials);
        CloseableHttpClient client = build.setDefaultCredentialsProvider(
                credentialsProvider).build();
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        System.out.println(EntityUtils.toString(entity));
    }

    /**
     * 使用httpclient3实现代理(带密码的代理)
     *
     * @throws Exception
     */
    @Test
    public void test4() throws Exception {
        HttpClient httpClient = new HttpClient();
        org.apache.commons.httpclient.auth.AuthScope authscope = new org.apache.commons.httpclient.auth.AuthScope(
                ip, port);
        org.apache.commons.httpclient.Credentials credentials = new org.apache.commons.httpclient.UsernamePasswordCredentials(
                username, password);
        httpClient.getState().setProxyCredentials(authscope, credentials);
        GetMethod method = new GetMethod(url);
        httpClient.executeMethod(method);
        String result = new String(method.getResponseBody());
        System.out.println(result);
    }

    /**
     * 模拟登录官网(http://mis.pyc.com.cn�?
     *
     * @throws Exception
     */
    @Test
    public void testLogin() throws Exception {
        HttpClientBuilder build = HttpClients.custom();
        CloseableHttpClient client = build.build();
        HttpPost post = new HttpPost("http://mis.pyc.com.cn/login.aspx");
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        params.add(new BasicNameValuePair("__VIEWSTATE",
                "/wEPDwUJNjUwNzE0MTM4ZGQzh+vF2xGjdG8Q15kIqgR0CpxhmPucdCqZOPcglRZr/w=="));
        params.add(new BasicNameValuePair(
                "__EVENTVALIDATION",
                "/wEWBQLYtKSdCALEhISFCwKd+7qdDgKC3IeGDAK7q7GGCOqhJpRD8S8yy3ZAlPTSsmPzRUoXMK0mQvGgzlk6hm+G"));
        params.add(new BasicNameValuePair("txtName", "xxxxx"));
        params.add(new BasicNameValuePair("txtPwd", "xxxxxx"));
        params.add(new BasicNameValuePair("btnLogin", "xxxx"));
        HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
        post.setEntity(entity);
        CloseableHttpResponse response = client.execute(post);
        int statusCode = response.getStatusLine().getStatusCode();
        System.err.println("状态" + statusCode);
        if (statusCode == 302) {
            Header[] location = response.getHeaders("location");
            String rediretUrl = null;
            if (location.length == 1) {
                rediretUrl = "http://mis.pyc.com.cn" + location[0].getValue();
                System.err.println("跳转地址: " + rediretUrl);
            }
            Header[] allHeaders = response.getAllHeaders();
            System.out.println("==================response===================");
            for (Header header : allHeaders) {
                System.err.println(header.getName() + ": " + header.getValue());
            }
            Header cookieHeader = response.getFirstHeader("Set-Cookie");
            String cookie = cookieHeader.getValue();
            System.out.println("cookie: " + cookie);
            HttpGet httpGet = new HttpGet(rediretUrl);
            httpGet.addHeader("Accept",
                    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            // httpGet.addHeader("Accept-Encoding", "gzip, deflate, sdch");
            // httpGet.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
            httpGet.addHeader("Connection", "keep-alive");
            httpGet.addHeader("Cookie", cookie);
            httpGet.addHeader("Host", "mis.pyc.com.cn");
            httpGet.addHeader("Referer", "http://mis.pyc.com.cn/login.aspx");
            httpGet.addHeader(
                    "User-Agent",
                    "ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36");
            response = client.execute(httpGet);
            HttpEntity entity2 = response.getEntity();
            System.out
                    .println("----------------------------------------------");
            System.out.println(EntityUtils.toString(entity2));
        }
    }
}

// 创建HttpClientBuilder 
HttpClientBuilder httpClientBuilder = HttpClients.custom();
CloseableHttpClient httpclient = null;
CloseableHttpResponse response = null;

try {
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, TenpayServiceCore.mch_id.toCharArray()).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);


HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/secapi/");
//System.out.println("executing request" + httpPost.getRequestLine());

///////////////////

//////////////////////

//判断是否使用代理
if (ProxyUtil.getInstance().getIsUseProxy()) {
System.out.println("==========tenpay proxy req");
ProxyUtil proxy = ProxyUtil.getInstance();
//创建认证,并设置认证范围
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(proxy.getHttpProxyIP(), proxy.getHttpProxyPort()),
new UsernamePasswordCredentials(proxy.getHttpProxyUser(), proxy.getHttpProxyPwd()));

//////////////
httpClientBuilder.setSSLSocketFactory(sslsf);

// 设置HTTP代理IP和端口
/*CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope("localhost", 8888),
new UsernamePasswordCredentials("squid", "squid"));
credsProvider.setCredentials(new AuthScope("httpbin.org", 80),
new UsernamePasswordCredentials("user", "passwd"));
httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();*/

httpclient = httpClientBuilder.setDefaultCredentialsProvider(credsProvider).build();

//System.out.println("executing request" + httpPost.getRequestLine());

// 设置类型
// 依次是目标请求地址,端口号,协议类型 
HttpHost targethost = new HttpHost("https://api.mch.weixin.qq.com/", 443, "https");
// 代理的设置
HttpHost proxyhost = new HttpHost(proxy.getHttpProxyIP(), proxy.getHttpProxyPort());
RequestConfig config = RequestConfig.custom().setProxy(proxyhost).build();

httpPost.setConfig(config);
response = httpclient.execute(targethost, httpPost);
} else {
httpclient = httpClientBuilder.setSSLSocketFactory(sslsf).build();
response = httpclient.execute(httpPost);
}


分享到:
评论

相关推荐

    commons-httpclient-3.1.jar

    HttpClient 3.1是在2006年发布的,虽然现在已经有些过时(因为更现代的替代品如HttpURLConnection和Apache HttpClient 4.x及更高版本已经出现),但它仍然是许多遗留系统和项目中广泛使用的组件。 **主要功能** 1. ...

    httpclient相关jar包

    虽然`commons-httpclient`是一个成熟的库,但随着Java生态系统的发展,现在更推荐使用Java 7及更高版本内置的`java.net.HttpURLConnection`或者现代化的HTTP客户端库,如Apache HttpClient的最新版(如4.x或5.x)、...

    httpclient4.1访问https的配置方法

    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; // 这里为了演示,实际应用应谨慎处理 } }); SSLConnectionSocketFactory sslsf = new ...

    Httpclient

    - **支持代理设置**:能够通过代理服务器访问互联网资源。 2. **使用场景** - **API接口测试**:HttpClient是接口测试的常用工具,可以方便地构造请求并验证响应。 - **Web服务客户端**:在Java应用中,...

    C# POST登录迅雷

    这段代码中,我们创建了一个HttpClient实例,设置了User-Agent头(模拟浏览器行为),然后构建了一个FormUrlEncodedContent对象,包含用户名和密码。接着,我们调用PostAsync方法发送POST请求到迅雷的登录URL,并...

    Java获取MQ连接数的Demo.zip

    在Java编程环境中,RabbitMQ是一个非常流行的开源消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议工作。这个压缩包“Java获取MQ连接数的Demo.zip”提供了一个简单的Java示例,用于展示...

    Java模拟登录新浪微博

    在这种情况下,你可能需要引入更复杂的技术,如图像识别(OCR)来解决验证码,或者使用代理IP池来避免被封禁。 在实际项目中,为了代码的可维护性和可扩展性,通常会封装这些操作到一个专门的`HttpClient`类中。...

    运用爬虫模拟登陆

    在Java中,我们可以使用`HttpURLConnection`、`HttpClient`(如Apache HttpClient)或第三方库如`Jsoup`来构建这样的请求。 **1. 请求准备:** - 设置URL:登录页面的URL是首先需要确定的,可以通过浏览器的开发者...

    spring-cxf-webservice架包及配置文件

    - Spring CXF支持WS-Security,可以配置用户名/密码、X.509证书等安全策略。 - 使用Spring Security可以实现更高级别的安全性,如角色授权、OAuth2认证等。 8. **监控和调试** - CXF提供了丰富的日志和跟踪机制...

    cxf 开发webservice与调用demo

    CXF支持WS-Security,可以实现基于用户名/密码、X.509证书等的安全认证。此外,还可以集成Spring Security进行更高级的安全控制。 七、异常处理 CXF允许自定义错误处理,可以通过全局异常处理器或在服务接口中声明...

    基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    2. 有些网站可能会有反爬虫策略,例如验证码、IP限制等,这时可能需要更复杂的处理,如使用代理IP、识别和输入验证码等。 3. 在处理POST数据时,确保数据格式正确,如使用multipart/form-data或application/x-...

Global site tag (gtag.js) - Google Analytics