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.pswp.cn/news/385904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385904.shtml
英文地址,請注明出處:http://en.pswp.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微…