java client_java中HttpClient的使用

HttpClient的使用步骤:

1、使用Apache的HttpClient发送GET和POST请求的步骤如下:

1. 使用帮助类HttpClients创建CloseableHttpClient对象. 2. 基于要发送的HTTP请求类型创建HttpGet或者HttpPost实例.

3. 使用addHeader方法添加请求头部,诸如User-Agent, Accept-Encoding等参数.

4. 对于POST请求,创建NameValuePair列表,并添加所有的表单参数.然后把它填充进HttpPost实体.

5. 通过执行此HttpGet或者HttpPost请求获取CloseableHttpResponse实例

6. 从此CloseableHttpResponse实例中获取状态码,错误信息,以及响应页面等等.

7. 最后关闭HttpClient资源.

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

1. 创建HttpClient对象,HttpClients.createDefault()。

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

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。List valuePairs = new LinkedList();valuePairs.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));httpPost.setEntity(formEntity)。

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

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

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

httpClient实例:

实例一:

package http;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import org.apache.commons.httpclient.HttpClient;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

import org.apache.http.impl.client.HttpClients;

public class HttpTest {

public Boolean isRequestSuccessful(HttpResponse httpresponse){

return httpresponse.getStatusLine().getStatusCode()==200;

}

public String HttpPost(String param1,String param2,String url) throws Exception{

Map personMap = new HashMap();

personMap.put("param1",param1);

personMap.put("param1",param2);

List list = new LinkedList();

for(Entry entry:personMap.entrySet()){

list.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));

}

HttpPost httpPost = new HttpPost(url);

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list,"utf-8");

httpPost.setEntity(formEntity);

HttpClient httpCient = HttpClients.CreatDefault();

HttpResponse httpresponse = null;

try{

httpresponse = httpClient.execute(httpPost);

HttpEntity httpEntity = httpresponse.getEntity();

String response = EntityUtils.toString(httpEntity, "utf-8");

return response;

}catch(ClientProtocolException e){

System.out.println("http请求失败,uri{},exception{}");

}catch(IOException e){

System.out.println("http请求失败,uri{},exception{}");

}

return null;

}

}

实例二:

package com.kingdee.opensys.common.util.http;

import java.io.IOException;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

import org.apache.http.HttpEntity;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.entity.GzipDecompressingEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpRequestBase;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.apache.http.util.EntityUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class HttpClientHelper {

private static Logger logger = LoggerFactory.getLogger(HttpClientHelper.class);

private static HttpClientHelper instance = null;

private static Lock lock = new ReentrantLock();

private static CloseableHttpClient httpClient;

public HttpClientHelper(){

instance = this;

}

public static HttpClientHelper getHttpClient(){

if(instance == null){

lock.lock();

try{

instance = new HttpClientHelper();

}catch(Exception e){

e.printStackTrace();

}finally{

lock.unlock();

}

}

return instance;

}

public void init(){

PoolingHttpClientConnectionManager pool = new PoolingHttpClientConnectionManager();

pool.setMaxTotal(500);

pool.setDefaultMaxPerRoute(50);

httpClient = HttpClientBuilder.create().setConnectionManager(pool).build();

}

public byte[] executeAndReturnByte(HttpRequestBase request) throws Exception{

HttpEntity entity = null;

CloseableHttpResponse response = null;

byte[] base = new byte[0];

if(request==null){

return base;

}

if(httpClient==null){

init();

}

if(httpClient==null){

logger.error("http获取异常");

return base;

}

response = httpClient.execute(request);

entity = response.getEntity();

if(response.getStatusLine().getStatusCode()==200){

String encode = (""+response.getFirstHeader("Content-Encoding")).toLowerCase();

if(encode.indexOf("gzip")>0){

entity = new GzipDecompressingEntity(entity);

}

base = EntityUtils.toByteArray(entity);

}else{

logger.error(""+response.getStatusLine().getStatusCode());

}

EntityUtils.consumeQuietly(entity);

response.close();

httpClient.close();

return base;

}

public String execute(HttpRequestBase request) throws Exception{

byte[] base = executeAndReturnByte(request);

if(base==null){

return null;

}

String result = new String(base,"UTF-8");

return result;

}

}

package com.kingdee.opensys.common.util.http;

import java.io.UnsupportedEncodingException;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import org.apache.http.HttpEntity;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.message.BasicNameValuePair;

import javax.servlet.http.HttpServletRequest;

public class HttpHelper {

private static String UTF8 = "UTF-8";

private static RequestConfig requestConfig;

public static String post(Map header,Map params,String url) throws Exception{

HttpPost post = null;

post = new HttpPost(url);

if(header!=null){

for(String key:header.keySet()){

post.addHeader(key, header.get(key));

}

}

if(params!=null){

List list = new LinkedList();

post.setConfig(getRequestConfig());

for(String key:params.keySet()){

list.add(new BasicNameValuePair(key,params.get(key)));

}

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,UTF8);

post.setEntity(entity);

}

return HttpClientHelper.getHttpClient().execute(post);

}

public static String post(Map header,String jsonObject,String url) throws Exception{

HttpPost post = null;

post = new HttpPost(url);

if(header!=null){

for(String key:header.keySet()){

post.addHeader(key, header.get(key));

}

}

if(jsonObject.isEmpty()){

throw new Exception("jsonObject不能为空!");

}

HttpEntity entity = new StringEntity(jsonObject,"UTF-8");

return HttpClientHelper.getHttpClient().execute(post);

}

public static String post(Map params,String url) throws Exception{

HttpPost post = null;

post = new HttpPost(url);

List list = new LinkedList();

post.setConfig(getRequestConfig());

for(String key:params.keySet()){

list.add(new BasicNameValuePair(key,params.get(key)));

}

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,UTF8);

post.setEntity(entity);

return HttpClientHelper.getHttpClient().execute(post);

}

public static RequestConfig getRequestConfig(){

if(requestConfig==null){

requestConfig = RequestConfig.custom().setConnectionRequestTimeout(20000)

.setConnectTimeout(20000).setSocketTimeout(20000).build();

}

return requestConfig;

}

public static String getClientIp(HttpServletRequest request){

String ip = request.getHeader("x-forwarded-for");

if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){

ip = request.getHeader("Proxy-Client-IP");

}

if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){

ip = request.getHeader("WL-Proxy-Client_IP");

}

if(ip==null||ip.length()==0||"unkonwn".equalsIgnoreCase(ip)){

ip = request.getRemoteAddr();

}

if(ip.length()<5){

ip="0.0.0.0";

}

return ip;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java小项目实例,成功入职阿里

我听到的一些发声 你们赚的钱已经可以了&#xff1a; 我一个发小是做土木工程的&#xff0c;上海大学博士&#xff0c;参与很多著名建筑的工程&#xff0c;但是从薪资上看&#xff0c;还不如一些稍微像样的公司的6年多的高级开发。为什么&#xff1f;这就是行业的红利&#xf…

java属于什么行业,吐血整理

微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务&#xff0c;这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇&#xff0c;很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。 微服务落地存在的问题 虽…

java struts2 ajax_在struts2的Action中返回Ajax数据

author:z_xiaofei168如何在struts2的action中返回数据(普通字符串、图片)给ajax核心中的XMLHttpRequest对象。今天下午做项目&#xff0c;就是用户注册是时候&#xff0c;登录名是否唯一&#xff0c;我用的ajax验证&#xff0c;但怎么也不返回我想要的数据&#xff0c;纠结了老…

Nginx负载均衡策略有哪些?知识点总结+面试题解析

前言 看日期&#xff0c;今天都是4月了&#xff0c;这春招也差不多进入尾声了。 近期任有不少朋友都在找工作&#xff0c;很多人开始抱怨&#xff0c;工作可真难找啊&#xff01;身边不少朋友问我咋搞呀&#xff0c;秋招都要结束了&#xff0c;工作还没着落呢…额…这个…今年…

java bean jsp_JavaBean与Jsp

这一节我们总结一下JavaBean和Jsp的关系。1. JavaBeanjavaBean是一个遵循特定写法的Java类&#xff0c;它通常具有如下特点&#xff1a;1)这个java类必须具有一个无参构造函数&#xff1b;2)属性必须私有化&#xff1b;3)私有化的属性必须通过public类型的方法暴露给其他程序&a…

P8级别的顶级“并发编程”宝典,最全指南

前言 前几天我上班路上&#xff0c;和小区门口开车的师傅闲聊&#xff0c;发现他们虽然学历不高&#xff0c;但挣钱的途径不少&#xff0c;比如固定接送多位客户&#xff0c;然后能通过朋友圈拓展新客户&#xff0c;而且通过客户口口相传&#xff0c;也能不断拉到生意&#xf…

java 追加写入txt文件_ava如何追加写入txt文件

(二)方法1public void method1() {FileWriter fw null;try {//如果文件存在&#xff0c;则追加内容&#xff1b;如果文件不存在&#xff0c;则创建文件File fnew File("E:\dd.txt");fw new FileWriter(f, true);} catch (IOException e) {e.printStackTrace();}Pri…

Redis宕机数据丢失解决方案,不吃透都对不起自己

前言 昨天&#xff0c;有个女孩子问我提高数据库查询性能有什么立竿见影的好方法&#xff1f; 这简直是一道送分题&#xff0c;我自豪且略带鄙夷的说&#xff0c;当然是加「索引」了。 她又不紧不慢的问&#xff0c;索引为什么就能提高查询性能。 这还用问&#xff0c;索引…

c 加密 java解密错误_java解密出错

展开全部你那个代码少得东西太多&#xff0c;我左试右试&#xff0c;都是错&#xff0c;也不知道你的初始32313133353236313431303231363533e78988e69d8331333332613762值都是什么。给你写了一个加密解密的&#xff0c;希望对你有帮助。import java.security.NoSuchAlgorithmEx…

Redis成神之路电子版教程已问世,面试题+笔记+项目实战

前言 我想对所有程序员说&#xff1a;除了看视频、做项目来提高自身的技术之外&#xff0c;还有一种提升自己的专业技能就是&#xff1a;多&#xff01;看&#xff01;书&#xff01;&#xff08;本文内提到的书单笔者整理出了一份电子档作为分享&#xff0c;文末有免费获取方式…

java 中的event_Java中this与event有什么不同

Java中this与event有什么不同发布时间&#xff1a;2021-02-11 10:37:25来源&#xff1a;亿速云阅读&#xff1a;61作者&#xff1a;LeahJava中this与event有什么不同&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本文总结了问题出现的原因和解决方法&#xff…

Redis有几种数据类型?文末领取面试资料

前言 其实前几篇文章已经写了好多有关于Spring源码的文章&#xff0c;事实上&#xff0c;很多同学虽然一直在跟着阅读、学习这些Spring的源码教程&#xff0c;但是一直都很迷茫&#xff0c;这些Spring的源码学习&#xff0c;似乎只是为了面试吹逼用&#xff0c;我大概问过一些…

java 多重属性_最全面的44个Java 性能调优细节

我认为&#xff0c;代码优化的最重要的作用应该是&#xff1a;避免未知的错误。在代码上线运行的过程中&#xff0c;往往会出现很多我们意想不到的错误&#xff0c;因为线上环境和开发环境是非常不同的&#xff0c;错误定位到最后往往是一个非常小的原因。然而为了解决这个错误…

Redis灵魂14问?真香

前言 今日博主听闻&#xff0c;现在很多培训出来的应届生薪资都赶上了摸爬滚打两三年的朋友&#xff0c;讲道理&#xff0c;这说不过去啊 作为同行来说&#xff0c;这个行业发展很快&#xff0c;技术更新很快&#xff0c;淘汰也很快&#xff0c;千万不要再找借口了&#xff0…

java主流微服务框架_Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解,...

Spring Boot作为当下最流行的微服务开发框架&#xff0c;一名合格的Java开发者一定有所了解&#xff0c;Spring Boot相对于传统的SSM框架来说&#xff1a;springboot使用了特定的配置方式&#xff0c;开发人员不需要再定义样板化的配置&#xff0c;简化项目的初始构建springboo…

Redis面试复习大纲在手面试不慌,内含福利

前言 这几年在Java工程师招聘时&#xff0c;会看到很多人的简历都写着使用了Spring Cloud做微服务实现&#xff0c;使用Docker做自动化部署&#xff0c;并且也会把这些做为自己的亮点。而比较有趣的这其中以小公司出来的人为绝大多数&#xff0c;大的公司出来的人简历上倒是很…

java注解编程_Java注解编程原理

一、先了解以下4个元注解Documented具体来说是生成说明文档时把类的解释添加进去。Inherited 允许子类继承父类中的注解Target 表示该注解用于什么地方&#xff0c;可能的值在枚举类 ElemenetType 中public enum ElementType {TYPE, //给类(型)注解FIELD, //给字段注解&#x…

Redis面试复习大纲在手面试不慌,讲的明明白白!

前言 面试时间将近两个小时&#xff08;期间等待二面面试官来面我的时候等了半个多小时&#xff09;面试官问的东西很多&#xff0c;还挖了好几个坑&#xff0c;一个技术点套着一个技术点的问&#xff0c;一定要做好万全的准备。问了一些基本层面上的技术点都答出来了&#xf…

python sendline_python Pexpect模块的使用

Pexpect简介在讲解Pexpect之前&#xff0c;我们需要先了解一下Expect这个脚本语言&#xff0c;它是由TCL语言实现的&#xff0c;主要用于人机交互式对话的自动化控制&#xff0c;可以用来完成ssh、ftp、telnet等命令行程序的自动化交互。Pexpect其实就是一个用Python语言实现的…

RocketMQ消息丢失场景及解决办法,已拿offer入职

前言 当前我们都会说SpringBoot是Spring框架对“约定优先于配置理念的最佳实践的产物&#xff0c;一个典型的SpringBoot应用本质上其实就是一个基于Spring框架的应用&#xff0c;而如果大家对Spring框架已经了如指掌&#xff0c;那么&#xff0c;在我们一步步揭开SpringBoot微…