程序员的知识教程库

网站首页 > 教程分享 正文

HttpClient的简单使用(c# httpclient post请求)

henian88 2024-10-20 05:50:34 教程分享 18 ℃ 0 评论

HttpClient

Apache HttpComponents 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 不是浏览器,它是一个客户端 HTTP 协议传输类库。HttpClient 被用来发送和接受 HTTP 消息。HttpClient 不会处理 HTTP 消息的内容,不会进行 javascript 解析,不会关心 content type,如果没有明确设置,HttpClient 也不会对请求进行格式化、重定向 url,或者其他任何和 HTTP 消息传输相关的功能。

使用步骤

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。

1. 创建HttpClient对象。

2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

6. 释放连接。无论执行方法是否成功,都必须释放连接

代码实现

maven项目中加入HttpClient的依赖jar包

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.5.2</version>

</dependency>

HttpClientUtil类

package com.mundo.monkey.util;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * @ClassName: HttpClientUtil
 * @Description: TODO
 * @author Mundo
 */
public class HttpClientUtil {
	private static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
	/**
	 * @Title: doGet
	 * @Description: get方式
	 * @param url请求路径
	 * @param params参数
	 * @author Mundo
	 */
	public static String doGet(String url, Map<String, String> params) {
		// 返回结果
		String result = "";
		// 创建HttpClient对象
		HttpClient httpClient = HttpClientBuilder.create().build();
		HttpGet httpGet = null;
		try {
			// 拼接参数,可以用URIBuilder,也可以直接拼接在?传值,拼在url后面,如下--httpGet = new
			// HttpGet(uri+"?id=123");
			URIBuilder uriBuilder = new URIBuilder(url);
			if (null != params && !params.isEmpty()) {
				for (Map.Entry<String, String> entry : params.entrySet()) {
					uriBuilder.addParameter(entry.getKey(), entry.getValue());
					// 或者用
					// 顺便说一下不同(setParameter会覆盖同名参数的值,addParameter则不会)
					// uriBuilder.setParameter(entry.getKey(), entry.getValue());
				}
			}
			URI uri = uriBuilder.build();
			// 创建get请求
			httpGet = new HttpGet(uri);
			logger.info("访问路径:" + uri);
			HttpResponse response = httpClient.execute(httpGet);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 返回200,请求成功
				// 结果返回
				result = EntityUtils.toString(response.getEntity());
				logger.info("请求成功!,返回数据:" + result);
			} else {
				logger.info("请求失败!");
			}
		} catch (Exception e) {
			logger.info("请求失败!");
			logger.error(ExceptionUtils.getStackTrace(e));
		} finally {
			// 释放连接
			if (null != httpGet) {
				httpGet.releaseConnection();
			}
		}
		return result;
	}
	/**
	 * @Title: doPost
	 * @Description: post请求
	 * @param url
	 * @param params
	 * @return
	 * @author Mundo
	 */
	public static String doPost(String url, Map<String, String> params) {
		String result = "";
		// 创建httpclient对象
		HttpClient httpClient = HttpClientBuilder.create().build();
		HttpPost httpPost = new HttpPost(url);
		try { // 参数键值对
			if (null != params && !params.isEmpty()) {
				List<NameValuePair> pairs = new ArrayList<NameValuePair>();
				NameValuePair pair = null;
				for (String key : params.keySet()) {
					pair = new BasicNameValuePair(key, params.get(key));
					pairs.add(pair);
				}
				// 模拟表单
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs);
				httpPost.setEntity(entity);
			}
			HttpResponse response = httpClient.execute(httpPost);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				result = EntityUtils.toString(response.getEntity(), "utf-8");
				logger.info("返回数据:>>>" + result);
			} else {
				logger.info("请求失败!,url:" + url);
			}
		} catch (Exception e) {
			logger.error("请求失败");
			logger.error(ExceptionUtils.getStackTrace(e));
			e.printStackTrace();
		} finally {
			if (null != httpPost) {
				// 释放连接
				httpPost.releaseConnection();
			}
		}
		return result;
	}
	/**
	 * @Title: sendJsonStr
	 * @Description: post发送json字符串
	 * @param url
	 * @param params
	 * @return 返回数据
	 * @author Mundo
	 */
	public static String sendJsonStr(String url, String params) {
		String result = "";
		HttpClient httpClient = HttpClientBuilder.create().build();
		HttpPost httpPost = new HttpPost(url);
		try {
			httpPost.addHeader("Content-type", "application/json; charset=utf-8");
			httpPost.setHeader("Accept", "application/json");
			if (StringUtils.isNotBlank(params)) {
				httpPost.setEntity(new StringEntity(params, Charset.forName("UTF-8")));
			}
			HttpResponse response = httpClient.execute(httpPost);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				result = EntityUtils.toString(response.getEntity());
				logger.info("返回数据:" + result);
			} else {
				logger.info("请求失败");
			}
		} catch (IOException e) {
			logger.error("请求异常");
			logger.error(ExceptionUtils.getStackTrace(e));
		}
		return result;
	}
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("id", UUID.randomUUID().toString());
		String get = doGet("http://localhost:8080/mundo/test", map);
		System.out.println("get请求调用成功,返回数据是:" + get);
		String post = doPost("http://localhost:8080/mundo/test", map);
		System.out.println("post调用成功,返回数据是:" + post);
		String json = sendJsonStr("http://localhost:8080/mundo/test", "{\"name\":\"David\"}");
		System.out.println("json发送成功,返回数据是:" + json);
	}
}

本文是httpclient的简单使用实例

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表