HttpClient工具类(包含请求头设置及请求示例)

本文详细介绍了如何利用HttpClient工具类进行网络请求,包括设置请求头和具体请求操作的实例,帮助开发者掌握HttpClient的实用技巧。
摘要由CSDN通过智能技术生成
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
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.RequestBuilder;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EntityUtils;

/**
 * 封装了一些采用HttpClient发送HTTP请求的方法
 * 
 * @see 本工具所采用的是最新的HttpComponents-Client-4.2.1
 */
public class HttpClientUtils {

	private static Log logger = LogFactory.getLog(HttpClientUtils.class);

	/**
	 * 设置请求头和参数 post提交
	 * 
	 * @param urlStr
	 *            地址
	 * @param headMap
	 *            请求头
	 * @param paramMap
	 *            内容参数
	 * @return
	 */
	public static String connectPost(String urlStr, Map<String, String> headMap, Map<String, String> paramMap) {
		logger.info("========设置请求头和参数并以 post提交=======");
		URL url;
		String sCurrentLine = "";
		String sTotalString = "";

		DataOutputStream out = null;

		try {
			url = new URL(urlStr);
			logger.info("请求地址:" + urlStr);
			URLConnection URLconnection = url.openConnection();
			HttpURLConnection httpConnection = (HttpURLConnection) URLconnection;
			// httpConnection.setRequestProperty("Content-type", "application/json");
			httpConnection.setRequestProperty("Accept-Charset", "utf-8");
			httpConnection.setRequestProperty("contentType", "utf-8");

			if (headMap != null && !headMap.isEmpty()) {
				for (String key : headMap.keySet()) {
					logger.info("头部信息key:" + key + "===值: " + headMap.get(key));
					httpConnection.setRequestProperty(key, headMap.get(key));
				}
			}

			httpConnection.setRequestMethod("POST");

			httpConnection.setDoOutput(true);
			httpConnection.setDoInput(true);

			StringBuffer params = new StringBuffer();
			// 表单参数与get形式一样
			if (paramMap != null && !paramMap.isEmpty()) {
				for (String key : paramMap.keySet()) {
					if (params.length() > 1) {
						params.append("&");
					}
					params.append(key).append("=").append(paramMap.get(key).trim());

				}
				logger.info("请求参数: " + params.toString());
			}
			//System.out.println("params = " + params.toString());
			out = new DataOutputStream(httpConnection.getOutputStream());
			// 发送请求参数
			if (params!=null) {
				out.writeBytes(params.toString());
			}
			// flush输出流的缓冲
			out.flush();
			// int responseCode = httpConnection.getResponseCode();
			// if (responseCode == HttpURLConnection.HTTP_OK) {
			InputStream urlStream = httpConnection.getInputStream();
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlStream));

			while ((sCurrentLine = bufferedReader.readLine()) != null) {
				sTotalString += sCurrentLine;
			}
			// //System.out.println(sTotalString);
			// 假设该url页面输出为"OK"

			// }else{
			// System.err.println("FIAL");
			// }
		} catch (Exception e) {
			logger.info("请求错误: " + e.getMessage());
			logger.error("系统错误:",e);
		} finally {

		}
		logger.info("响应信息: " + sTotalString);
		return sTotalString;
	}
	
	
	public static void test() throws Exception{
        String url = "http://******/api/hdfs/proxy/create?username=******&password=*****&uri=/test/test-xx.txt";
        byte[] bytes = "1".getBytes();

        HttpClient client = HttpClients.createDefault();
        RequestBuilder requestBuilder = RequestBuilder.post();
        requestBuilder.setEntity(new ByteArrayEntity(bytes));
        requestBuilder.setUri(url);

        HttpResponse response = client.execute(requestBuilder.build());
        HttpEntity entity = response.getEntity();
        //获得响应流
        InputStream is = entity.getContent();

        //读取流中内容
        ByteArrayBuffer buffer = new ByteArrayBuffer(4096);
  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值