HttpClient 详解

概要:

HttpClient 设置Get/Post请求参数,cookie,Referer,user-agent,代理,超时时间等

| |目录

基础环境


Maven pom

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.3.3</version>
</dependency>

HttpClient 设置Post参数

HttpPost httpPost = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("aaa", "x7AeuPz6dPPFaaKlXxvWVkiZu2Do25oHmRiLeWFM"));
nvps.add(new BasicNameValuePair("bbb", "bbb"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps));

HttpClient 设置Cookie

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Cookie","jsessionid=6B6FE81CCBEB80A0017B11D8ED1915A2");

HttpClient 设置Refere

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Referer", "http://www.baidu.com");

HttpClient 设置user-agent

String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36";
CloseableHttpClient httpClient = HttpClients.custom().setUserAgent(userAgent).build();

HttpClient 设置超时时间

全局设置

RequestConfig requestConfig = RequestConfig.custom()
        .setSocketTimeout(1000)
        .setConnectTimeout(1000)
        .build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();

为单独的HttpGet/Post设置

RequestConfig requestConfig = RequestConfig.custom()
        .setSocketTimeout(1000)
        .setConnectTimeout(1000)
        .build();
HttpGet httpget = new HttpGet("http://localhost/1");
httpget.setConfig(requestConfig);

HttpClient设置代理

// 代理地址,端口号,协议类型
HttpHost host = new HttpHost(ip, port, "http");
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(host);
CloseableHttpClient httpClient = HttpClients.custom().setRoutePlanner(routePlanner).build();

完整示例

package net.xsoftlab.baike;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.Consts;
import org.apache.http.HttpHost;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpClientTest {

	private final int socketTimeout = 120 * 1000;
	private final int connectTimeout = 120 * 1000;
	private final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36";

	/**
	 * 获取指定Url内容
	 * 
	 * @param url
	 * @return
	 */
	private String getResponseBody(String url) throws IOException {
		// 创建全局 RequestConfig ,并设置连接超时时间与数据响应超时时间
		RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connectTimeout)
				.setSocketTimeout(socketTimeout).build();
		// 创建HttpClient
		CloseableHttpClient httpClient = HttpClients.custom().setUserAgent(userAgent)
				.setDefaultRequestConfig(requestConfig).build();

		// 设置请求参数
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();
		nvps.add(new BasicNameValuePair("aaa", "x7AeuPz6dPPFaaKlXxvWVkiZu2Do25oHmRiLeWFM"));
		nvps.add(new BasicNameValuePair("bbb", "bbb"));
		String param = EntityUtils.toString(new UrlEncodedFormEntity(nvps, Consts.UTF_8));

		// 创建get请求
		HttpGet httpGet = new HttpGet(url + "?" + param);
		// 设置Cookie
		httpGet.setHeader("Cookie", "jsessionid=6B6FE81CCBEB80A0017B11D8ED1915A2");
		// 设置Referer
		httpGet.setHeader("Referer", "http://www.baidu.com/");

		// 获取响应结果
		CloseableHttpResponse response = httpClient.execute(httpGet);
		// 状态码
		int status = response.getStatusLine().getStatusCode();
		if (status == HttpStatus.SC_OK) {
			return EntityUtils.toString(response.getEntity());
		} else {
			return "请求失败,status = " + status;
		}
	}

	/**
	 * 使用代理获取Url内容
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getResponseBodyWithProxy(String ip, int port, String url) throws IOException {
		// 代理地址,端口号,协议类型
		HttpHost host = new HttpHost(ip, port, "http");
		DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(host);
		CloseableHttpClient httpClient = HttpClients.custom().setRoutePlanner(routePlanner).build();

		// 创建get请求
		HttpGet httpGet = new HttpGet(url);
		// 获取响应结果
		CloseableHttpResponse response = httpClient.execute(httpGet);
		// 状态码
		int status = response.getStatusLine().getStatusCode();
		if (status == HttpStatus.SC_OK) {
			return EntityUtils.toString(response.getEntity());
		} else {
			return "请求失败,status = " + status;
		}
	}

	public static void main(String[] args) throws IOException {
		String url = "http://baike.xsoftlab.net/view/956.html";

		HttpClientTest test = new HttpClientTest();
		String body = test.getResponseBody(url);
		System.out.println("请求地址:" + url);
		System.out.println(body);

		url = "http://www.google.com/";
		System.out.println("\n\n\n");
		System.out.println("请求地址:" + url);
		body = test.getResponseBodyWithProxy("127.0.0.1", 1080, url);
		System.out.println(body);
	}
}
评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消