1. 程式人生 > >HttpClient的使用以及jdk自帶URLConnection的使用

HttpClient的使用以及jdk自帶URLConnection的使用

使用HttpClient連線服務端的步驟:

1.建立HttpClient客戶端物件 HttpClient client = new DefaultHttpClient(); 2.建立請求物件          1.1 GET請求 HttpUriRequest request = new HttpGet(String uri)                    HttpUriRequest request = new HttpGet(URI uri)          1.2 POST請求                    1.2.1  建立Post方法的請求物件
                   HttpUriRequest request = new HttpPost()                    HttpUriRequest request = new HttpPost(String uri)                    HttpUriRequest request = new HttpPost(URI uri)                    1.2.2  建立請求引數的List集合                    List<NameValuePair> pairs = new ArrayList<NameValuePair>();
                   pairs.add(new BasicNameValuePair(“name” , “value”));                    ...                    1.2.3  使用請求引數List集合建立並設定請求實體                    UrlEncodedFormEntity requestEntity = new UrlEncodedFormEntity(pairs);                    (HttpPost)request.setEntity(requsetEntity);  //setEntity
HttpPost特有的方法
3.客戶端執行響應          HttpResponse response = client.execute(request); 4.獲取並判斷響應碼,獲取響應實體物件          if(response.getStatusLine().getStatusCode == HttpStatus.SC_OK){                   HttpEntity responseEntity = response.getEntity();          } 5.解析響應實體物件          InputStream is = entity.getContent();     //獲取內容讀取流          EntityUtils.toByteArray(entity);                //轉換成位元組陣列          EntityUtils.toString(entity);                        //轉換成字串          EntityUtils.toString(entity,"utf-8");                   //使用相應編碼轉換成字串

開發中的模式

public class HttpUtils{          //設定請求型別常量          public static final int METHOD_GET = 1;          public static final int METHOD _POST = 2;          /*           *建立方法獲取響應實體           *需要知道的引數有三個           *URI 帶有檔名稱的整個網路地址           *List<NameValuePair> 帶有引數的鍵值對           *int 訪問的方法,如果是1,代表GET方法;如果是2,代表POST方法          */          public HttpEntity getEntity(String uri , List<NameValuePair> params , int method) throws Exception{          //建立HttpEntity的引用          HttpEntity responseEntity = null;          //建立客戶端物件          HttpClient client = new DefaultHttpClient();          //建立請求物件          HttpUriRquest request = null;          //判斷方法時GET還是POST,並且建立請求物件          switch(method){          case 1:                    StringBuilder sb = new StringBuilder(uri);                    //迴圈加入請求引數                    if(params != null && !params.isEmpty()){          sb.append(“?”);          for(NameValuePair pair : pairs){                    sb.append(pair.getName());                    sb.append(“=”);                    sb.append(pair.getValue());                    sb.append(“&”); } sb.deleteCharAt(sb.lenght()-1); } request = new HttpGet(sb.toString()); break;                    case 2:                             request = HttpPost(uri);                             if(params != null && !params.isEmpty()){                                      //建立請求實體                                      UrlEncodedFormEntity requestEntity = new UtlEncodedFormEntity(params);                                      ((HttpPost)request).setEntity(requestEntity);                             }                             break; } //執行請求,獲取相應物件 HttpResponse response = client.execute(request); //獲取響應實體 if(response.getStatusLine().getStatusCode() == 200){ responseEntity = response.getEntity(); } return responseEntity; } }

HttpClient中常用到的類

HttpClient          |-- DefaultHttpClient 構造方法:     DefaultHttpClient 主要方法:     HttpResponse  execute(HttpUriRequest request) HttpUriRequest          |-- HttpGet 構造方法:     HttpGet()                                                HttpGet(String uri)          |-- HttpPost 構造方法:     HttpPost(String uri) 主要方法:     void setEntity(HttpEntity entity) HttpResponse 主要方法:                    StatusLine getStatusLine()                    Header[] getAllHeaders();                    HttpEntity getEntity(); HttpEntity 主要方法:                    InputStream getContent();                    long getContentLength();                    Header getContentType();          |-- UrlEncodedFormEntity 構造方法:UrlEncodedFormEntity(List<? extends NameValuePair> params)                                                //用於向請求物件中寫入請求實體(包含請求引數(NameValuePair)) EntityUtils          public static byte[] toByteArray(HttpEntity entity)          public static String toString(HttpEntity entity)          public static String toString(HttpEntity entity , String encoding) StatusLine          int getStatusCode() HttpStatus          SC_OK   SC_NOT_FOUND Header          String getName()          String getValue() NameValuePair          String getName()          String getValue()          |-- BasicNameValuePair 構造方法:BasicNameValuePair(String name , String value)

快速記憶(POST

1.       要想連線網路,肯定需要一個客戶端物件,所以首先建立一個客戶端物件HttpClient 2.       擁有客戶端物件之後肯定需要對網際網路進行訪問,首先要對網際網路進行請求,所以要建立一個請求物件HttpUriRequest,因為是Post請求,所以使用HttpPost 3.       我們知道請求物件包含請求行(方法、路徑、協議),訊息頭,請求實體三部分。通過new HttpPost(uri)可以設定請求行的路徑,現在需要設定請求實體中的請求引數。 我們知道請求引數一定是由請求引數的名稱和請求引數的值組成。這時就需要一個類NameValuePair,這是一個鍵值對,在初始化的時候為了簡便直接使用其子類BaseNameValuePair(String name , String value) 如果有多組請求引數就要使用List集合List<NameValuePair> 4.       已經有一個存放參數的鍵值對的集合只有,就可以建立一個請求實體物件,並且將引數集合傳進去—new UrlDecodedFormEntity(List<NameValuePair>) 5.       然後設定請求物件的請求實體 request.setEntity(new UrlDecodedFormEntity(List<NameValuePair>)) 6.       現在不管是要訪問的網路地址還是引數就都已經放入請求物件中了,現在就可以利用客戶端進行請求將請求物件傳送出去,並且獲得響應物件 響應物件 = 客戶端物件.execute(請求物件) 7.       我們都知道響應物件也是由狀態行(協議,狀態碼,狀態描述),訊息頭,響應實體三部分組成。現在有了響應物件就可以獲取響應物件中的訊息。

具體方法見上。

例項

  1. package com.test;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.IOException;  
  5. import java.io.UnsupportedEncodingException;  
  6. import java.security.KeyManagementException;  
  7. import java.security.KeyStore;  
  8. import java.security.KeyStoreException;  
  9. import java.security.NoSuchAlgorithmException;  
  10. import java.security.cert.CertificateException;  
  11. import java.util.ArrayList;  
  12. import java.util.List;  
  13. import javax.net.ssl.SSLContext;  
  14. import org.apache.http.HttpEntity;  
  15. import org.apache.http.NameValuePair;  
  16. import org.apache.http.ParseException;  
  17. import org.apache.http.client.ClientProtocolException;  
  18. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  19. import org.apache.http.client.methods.CloseableHttpResponse;  
  20. import org.apache.http.client.methods.HttpGet;  
  21. import org.apache.http.client.methods.HttpPost;  
  22. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;  
  23. import org.apache.http.conn.ssl.SSLContexts;  
  24. import org.apache.http.conn.ssl.TrustSelfSignedStrategy;  
  25. import org.apache.http.entity.ContentType;  
  26. import org.apache.http.entity.mime.MultipartEntityBuilder;  
  27. import org.apache.http.entity.mime.content.FileBody;  
  28. import org.apache.http.entity.mime.content.StringBody;  
  29. import org.apache.http.impl.client.CloseableHttpClient;  
  30. import org.apache.http.impl.client.HttpClients;  
  31. import org.apache.http.message.BasicNameValuePair;  
  32. import org.apache.http.util.EntityUtils;  
  33. import org.junit.Test;  
  34. 相關推薦

    HttpClient的使用以及jdkURLConnection的使用

    使用HttpClient連線服務端的步驟: 1.建立HttpClient客戶端物件 HttpClient client = new DefaultHttpClient(); 2.建立請求物件          1.1 GET請求 HttpUriRequest request = new Ht

    死鎖排查的小竅門 --使用jdk管理工具jstack

    pre ble new deadlock 一段 指令 tro bject print 本文版權歸 遠方的風lyh和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。 開發時間久了,難免會寫出一些一些死鎖的代碼,自己明明調用該方法可該方法就是不執行、不進該

    使用JDK的JConsole性能調優

    post catalina maxperm max 分享圖片 前行 性能調優 保存 style 找到你安裝的JDK運行此exe文件 如圖所示你會看到此界面 接下來運行你的tomcat但是再次之前我們需要加點東西 如圖中找到bin目錄下的catalin

    JDK的jvisualvm安裝Visual GC插件

    plugins 點擊下載 png 鏈接 cmd pan 自帶 ron 點擊 1.打開cmd,輸入jvisualvm,回車; 2.點擊工具——>插件; 3.訪問網址:https://visualvm.github.io/pluginscenters.html,找到

    利用JDK的keytool生成SSL證書然後導入到SpringBoot

    生成 密鑰 clas alias 自帶 就會 輸入 http -type 一:生成命令如下(這一步生成的暫不知道幹嘛用的) E:\Desktop\Documents\證書>keytool -genkey -alias tomcat -keypass 123456

    使用jdk的visualVM監控遠程監控was

    tps root fin 監控 sina xmx nag 結束進程 requested 1.登錄was控制臺https://172.16.87.221:9043/ibm/console/unsecureLogon.jsp服務器--服務器類型--Java 和進程管理---

    JDK記憶體及執行緒分析工具小記

    查詢、監控、分析Java應用程式的時候,我們關注的點主要集中在資源利用,比如CPU,記憶體,IO,執行緒等。其中記憶體以及執行緒的分析尤為常見。記憶體,是否有記憶體洩漏,各個區塊記憶體分配是否大小合適。執行緒,數目是否合理,有沒有死鎖,執行狀態如何。 jps -vl jps是JDK提

    任務排程(一)——jdk的Timer

      https://blog.csdn.net/xiaoxian8023/article/details/45569441     說到任務排程,大家可能會想到Quartz框架,但是jdk自帶的簡單任務排程工具類,反而瞭解的人並不是很多。我覺得如果你的業

    jdk的JVisualVM的視覺化監控

    如果你前面看了我幾篇關於jvm效能優化的文章,命令列操作是不是不直觀,那麼我們來使用這個JVisualVM吧,在jdk的bin資料夾裡,這個官方文件都有中文版,外掛啥的自己看著安裝。https://visualvm.github.io/pluginscenters.html 他主要有如下的功

    linux 的grep操作以及Linuxwc命令

    使用spark進行wordcount後可以通過Linux自帶的wc命令進行驗證 比如 spark命令是求出某個文件中spark的數量   使用wc驗證    grep spark README.md | wc   求出README.md

    利用 JDK 的 org.w3c.dom 進行物件, map 與 xml 的互相轉換

    利用 JDK 自帶的 org.w3c.dom 進行物件,map 與 xml 的簡單互相轉換, 其中用到了一個工具類 Hutools 下面是hutools的maven依賴 <dependency> <groupId>cn.hutool</groupId> <arti

    flink安裝以及執行wordcount示例(單機版,無hadoop環境)

    1、下載安裝包到/opt目錄 2、解壓安裝包 tar zxf flink-1.6.1-bin-hadoop26-scala_2.11.tgz  3、啟動flink cd /opt/flink-1

    JavaBean類與XML的互換----jdk的JAXBContext

    一、簡介 JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。該過程中,JAXB也提供了將XML例項文件反向生成Java物件樹的方法,並能將Java物件樹的內容

    JDK工具keytool生成ssl證書

    前言: 因為公司專案客戶要求使用HTTPS的方式來保證資料的安全,所以木有辦法研究了下怎麼生成ssl證書來使用https以保證資料安全。 百度了不少資料,看到JAVA的JDK自帶生成SSL證書的工具:keytool,外加看了同事的心得體會,自己總結了一下具體的使用方法

    使用JDK的keytool工具生成證書

    tro key 1.4 加密 域名 證書生成 官方文檔 非對稱 strong 一、keytool 簡介   keytool 是java用於管理密鑰和證書的工具,它使用戶能夠管理自己的公鑰/私鑰對及相關證書,用於(通過數字簽名)自我認證(用戶向別的用戶/服務認證自己)或數據

    JDK的命令列工具

    一、jps:JVM Process Status Tool,顯示指定系統內所有的虛擬機器程序。 jps的用法: jps工具主要選項: -q:只輸出JVMID,省略主類的名稱 -m:輸出虛擬機器程序啟動時傳遞給主類main()函式的引數 -l:輸出主類的全名,如果

    利用JDK工具構建一個簡單的Java SOAP Web Service

    這兩天由於工作的某些原因,需要了解一些關於Web Service的知識,然後在網上看到了這麼一篇簡單的有點略微過時但是對於初次接觸Web Service的同學來說又很有必要了解的文章,於是自己嘗試著將文章翻譯過來。 A. 構造Web服務 1. 構造一個簡單的hello

    使用JDK的VisualVM進行Java程式的效能分析

    VisualVM是什麼? VisualVM是JDK自帶的一個用於Java程式效能分析的工具,JDK安裝完畢後就有啦,在JDK安裝目錄的bin資料夾下能找到名稱為jvisualvm.exe。 要使用VisualVM分析您的應用效能,首先得讓Visual

    JUC之JDK鎖StampedLock

    一、初見 StampedLock是JDK 1.8的一把新鎖,同樣出自Doug Lee之手。這貨高階了,出身顯赫、自帶光環,有著光輝的使命。她是一把不一樣的鎖,前面我們所整理過的兩把鎖(ReentantLock&ReentrantReadWriteLock)都是基於AQS框架實

    JUC之JDK鎖ReentrantReadWriteLock

    一、Hello World! Java紀年1.5年,ReentrantReadWriteLock誕生於J·U·C。此後,國人一般稱它為讀寫鎖。人如其名,人如其名,她就是一個可重入鎖,同時她還是一個讀、寫鎖。 1.1 跟ReentrantLock並沒有親屬關係 因為Reentr