Java使用HttpClient进行HTTP代理

java 文章 2022-02-23 22:30 2380 0 全屏看文

AI助手支持GPT4.0

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
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.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class ClientProxyHttpClientHttp {
	// 代理服务器
	final static String proxyHost = "xxx";
	final static Integer proxyPort = 0;

	private static HttpHost proxy = null;

	private static RequestConfig reqConfig = null;

	static {
		proxy = new HttpHost(proxyHost, proxyPort, "http");
		reqConfig = RequestConfig.custom().setConnectionRequestTimeout(5000).setConnectTimeout(10000) // 设置连接超时时间
				.setSocketTimeout(10000) // 设置读取超时时间
				.setExpectContinueEnabled(false).setProxy(new HttpHost(proxyHost, proxyPort))
				.setCircularRedirectsAllowed(true) // 允许多次重定向
				.build();
	}

	public static void main(String[] args) {
		doGetRequest();
		doPostRequest();
	}

	public static void doGetRequest() {
		// 目标地址
		String targetUrl = "http://www.sanshu.cn";

		try {
			// 设置url参数 (可选)
			Map<String, String> urlParams = new HashMap<>();
			urlParams.put("uid", "1234567");
			String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(paramsAdapter(urlParams), "UTF-8"));
			HttpGet httpGet = new HttpGet(targetUrl + "?" + paramStr);
			String result = doRequest(httpGet);
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void doPostRequest() {
		try {
			// 要访问的目标页面
			HttpPost httpPost = new HttpPost("http://httpbin.org/post");

			// 设置表单参数
			Map<String, String> formParams = new HashMap<>();
			formParams.put("uid", "1234567");
			UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(paramsAdapter(formParams), "utf-8");
			httpPost.setEntity(uefEntity);
			String result = doRequest(httpPost);
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 设置请求头
	 * 
	 * @param httpReq
	 */
	private static void setHeaders(HttpRequestBase httpReq) {
		httpReq.setHeader("User-Agent",
				"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36");
		httpReq.addHeader("xxx", "xxx");
	}

	/**
	 * 执行请求
	 * 
	 * @param httpReq
	 * @return
	 */
	public static String doRequest(HttpRequestBase httpReq) {
		String result = new String();
		httpReq.setConfig(reqConfig);
		try {
			// 设置请求头
			setHeaders(httpReq);
			
			CloseableHttpClient httpClient = HttpClients.createDefault();
			// 执行请求
			CloseableHttpResponse httpResp = httpClient.execute(httpReq);
			
			// 保存Cookie
			
			// 获取http code
			int statusCode = httpResp.getStatusLine().getStatusCode();
			System.out.println(statusCode);
			
			HttpEntity entity = httpResp.getEntity();
			if (entity != null) {
				result = EntityUtils.toString(entity, "utf-8");
			}

			httpResp.close();
			httpClient.close();
			httpReq.abort();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return result;
	}

	/**
	 * 参数适配器,将系统定义的请求参数转换成HttpClient能够接受的参数类型
	 * 
	 * @param params
	 *            系统定义的请求参数
	 * @return HttpClient要求的参数类型
	 */
	private static List<NameValuePair> paramsAdapter(Map<String, String> map) {
		List<NameValuePair> nvps = new ArrayList<NameValuePair>();

		for (Entry<String, String> entry : map.entrySet()) {
			nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
		}
		return nvps;
	}

}


-EOF-

AI助手支持GPT4.0