接口自動化·分享·第二篇·你必須了解的HttpRequest和HttpResponse


 完成一個接口調用其實就是完成了一次http請求,所以你必須要清楚一個http請求的組成。

一次完整的請求包含:請求+響應

一、HttpRequest請求對象

要調用一個接口,首先要准備的是一個請求對象,上一篇代碼實現中創建post對象實際就是准備一個HttpRequest類型的對象:

 

//1.創建post對象,以post方式提交接口請求
HttpPost httpPost = new HttpPost(restUrl);

為什么我們可以把httpPost對象稱為請求對象?HttpPost與HttpRequest是什么關系呢,下圖給出了二者之間的關系:

由此圖可以看出,HttpPost是HttpRequest的實現類,因此它一個HttpRequest類型的請求對象。

 

HttpPost對象常用api整理:

1) 構造函數:HttpPost httpPost = new HttpPost(url),創建一個請求對象,請求類型為post,url作為參數,設置接口請求地址。

2) httpPost.setURI(URI uri),此中方式也可以設置接口請求的地址。

3) httpPost.addHeader(String name,String value),給一個請求對象添加請求頭信息,傳達給服務器某些信息,后面會給大家簡單的介紹下請求頭這個概念。

4) httpPost.setEntity(HttpEntity httpEntity),設置請求提交數據,比如接口參數。

5) ...

HttpGet類型也屬於HttpRequest類型,處理get類型的接口調用要用到HttpGet對象,本文不對HttpGet做過多介紹。有相關問題歡迎討論區發問。

 

二、HttpResponse響應對象

一個請求只要服務器響應了就會有一個HttpResponse對象產生,此響應對象中會有響應頭,狀態碼,響應數據報文等。

上一個篇章中我們用HttpClient框架技術處理接口調用時,響應對象用的是CloseableHttpResponse類型,這個類型是HttpResponse的子接口,二者的繼承關系如下:

 

CloseableHttpResponse類型對象httpResponse的常用api整理:

1) httpResponse.getFirstHeader(String name):從響應對象里獲取指定名字的首個響應頭(響應頭,傳達給客戶端的信息)。

2) httpResponse.getStatusLine().getStatusCode():從響應對象中獲取狀態碼,(200:成功,404:找不到資源,500:服務器內部異常...)。

3) httpResponse.getEntity():從響應對象中獲取響應數據HttpEntity對象。

4) ...

 

 三、請求頭

http協議約定,從客戶端發出去的請求都帶着請求頭,請求頭里面的信息是為了告訴服務器關於請求的一些信息,比如:客戶端支持的數據類型,支持的字符集,支持的語言環境,想要訪問的服務器等等。

以客戶端瀏覽器為例,在瀏覽器中訪問登錄接口,我們可以通過瀏覽器的調試器可以看到此請求相關的請求頭,另外整理了幾個其他較常見的請求頭:

 

  1. User-Agent:告訴服務器客戶端的相關信息(如果是瀏覽器會有版本,內核等信息)
  2. referer:告訴服務器,此請求是從哪個頁面上發出來(防盜鏈)
  3. X-Requested-With:告訴服務器這個是一個ajax請求
  4. Cookie:帶給服務器的cookie信息
  5. ...

請求頭可以在代碼中指定,添加,通過鍵值對的形式,調用:addHeader(String name,String value)即可在請求對象中添加一個名字為name,值為value的請求頭。

 

四、響應頭

類比請求頭,服務端的web容器實現了http協議則會在返回頭中告訴客戶端一些信息,比如:服務器只支持哪種類型的請求,返回的數據長度,數據類型,該怎么樣展示等。

仍然以上面瀏覽器訪問登錄接口為例,我們在瀏覽器的調試器中可以看到服務器響應回來的幾個響應頭信息:

 

 

“Set-Cookie”這個響應頭的作用是告訴瀏覽器需要去緩存的cookie數據。如果對於cookie不太明白的同學,可以去我的博客下面看一看這篇文章:https://www.cnblogs.com/nickjiang/p/9148136.html,整理了cookie和session的應用的應用區別。其他幾個比較常見的響應頭,大家也可以適當了解學習下:

  1.  location:告訴瀏覽器跳到哪里。
  2. content-length:告訴瀏覽器回送數據的長度。
  3. content-type:告訴瀏覽器回送數據的類型。
  4. ...

總結:為什么我們除了請求request和響應response外,還需要去了解請求頭,響應頭?因為我們后面會從響應頭里取數據,往請求頭里添加數據,這一塊的應用會在后面自動化框架的接口鑒權中得到體現

看完本文,相信你已經對上一篇接口調用的代碼實現有了更深一步的理解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM