溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

獲取客戶端HTTP請求頭的方法有哪些

發(fā)布時間:2020-11-27 16:14:33 來源:億速云 閱讀:418 作者:Leah 欄目:編程語言

本篇文章為大家展示了獲取客戶端HTTP請求頭的方法有哪些,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

獲取客戶端發(fā)來的HTTP請求頭中的內(nèi)容可以使用如下方法:

getDateHeader()

getHeader(String)

getHeaderNames()

getHeaders(String)

getIntHeader(String);

這些方法在各個特定的情況下能有不同的用途,體現(xiàn)出獲取客戶端請求頭方式的多樣性。

如通過getHeader(String)可以獲取指定請求頭的數(shù)據(jù)內(nèi)容:

String connectionState = request.getHeader("Connection");
System.out.println(connectionState);

獲取客戶端HTTP請求頭的方法有哪些

而通過getHeaderNames()可以獲取發(fā)送的所有請求頭,例:

Enumeration e = request.getHeaderNames();
 while(e.hasMoreElements()) {
    String headerName = (String) e.nextElement();
    String headerValue = request.getHeader(headerName);
    System.out.println(headerName+":"+headerValue);
 }

獲取客戶端HTTP請求頭的方法有哪些

而通過getHeaders(String)方法獲取的是某個同名頭的內(nèi)容,適用于當某個請求頭有多個內(nèi)容時使用。

介紹完獲取請求行和請求頭,下面介紹獲取請求數(shù)據(jù)中內(nèi)容的方法:

getPatameter(String)

getParameterNames()

getParameterValues(String)

getParameterMap()

和getInputStream()

使用getPatameter(String)方式可以獲取請求數(shù)據(jù)中指定的數(shù)據(jù)值

代碼如下:

String value = request.getParameter("username");
System.out.println(value);

常可以在瀏覽器地址URL后直接寫入?yún)?shù)數(shù)據(jù)來模擬GET方式:

獲取客戶端HTTP請求頭的方法有哪些

最終在控制臺得到:

獲取客戶端HTTP請求頭的方法有哪些

通過getParameterNames()可以獲取多個參數(shù):

Enumeration e = request.getParameterNames();
 while(e.hasMoreElements()) {
  String paramName = (String)e.nextElement();
  String paramValue = request.getParameter(paramName);
  System.out.println(paramName+":"+paramValue);
 }

獲取客戶端HTTP請求頭的方法有哪些

獲取客戶端HTTP請求頭的方法有哪些

使用getParameterValues(String)有助于獲取當請求數(shù)據(jù)參數(shù)名有相同時的情況:

比如下面這種情況:

獲取客戶端HTTP請求頭的方法有哪些

代碼:

String[] values = request.getParameterValues("username");
  for(int i=0;i<values.length;i++) {
   System.out.println(values[i]);
  }

在控制臺觀察:

  獲取客戶端HTTP請求頭的方法有哪些

(注意:像getPatameter(String)、getParameterValues(String)等等這樣的方法,都要小心空指針異常,可能的原因在于并沒有這樣的參數(shù),還有一種就是在URL后沒有任何參數(shù)傳入,所以要特別注意,應(yīng)該加入健壯性判斷。這也是編程過程中會碰到傳入?yún)?shù)都應(yīng)該注意的問題。)

使用getParameterMap()可以獲取以請求數(shù)據(jù)中參數(shù)和參數(shù)值作為的鍵值對的Map集合。這樣我們就能同時獲取鍵值對。假設(shè)有如下情況:

獲取客戶端HTTP請求頭的方法有哪些

代碼為:

Map<String,String[]> map = request.getParameterMap();
  for(Map.Entry<String, String[]> entry :map.entrySet()) {
  String paramName = entry.getKey();
  for(int i=0;i<entry.getValue().length;i++){
   String paramValue = entry.getValue()[i];
   System.out.println(paramName+":"+paramValue);
  }
 }

如果請求數(shù)據(jù)參數(shù)為:

獲取客戶端HTTP請求頭的方法有哪些

那么在控制臺上看到的則是:

獲取客戶端HTTP請求頭的方法有哪些

以上說明了常用的獲取數(shù)據(jù)的方式,還有一種屬于request響應(yīng)對象的getInutStream方法,而這個方法一般只用于大容量的數(shù)據(jù)獲取,比如文件上傳,將在之后的篇章中介紹。

下面介紹其他常用方法

通過getRequestURI方法和getRequestURL可以獲取http請求服務(wù)器資源的URI和URL,關(guān)于URI和URL的區(qū)別可以通過獲取后的字符串來查看:

代碼:

String fileURI = request.getRequestURI();
System.out.println("URI: "+fileURI);

StringBuffer fileURL = request.getRequestURL();
System.out.println("URL: "+fileURL.toString());

訪問該Servlet,得到:

獲取客戶端HTTP請求頭的方法有哪些

可以看出URI只包括在服務(wù)器中的web應(yīng)用名和資源對外訪問路徑(虛擬目錄)。

通過getQueryString()方法可以獲取URL上由GET方式帶來的參數(shù):

若代碼為:

System.out.println(request.getQueryString());

而我在訪問這個Servlet的URL上添加:“?username=fjdingsd&password=123”:

獲取客戶端HTTP請求頭的方法有哪些

那么當訪問這個Servlet之后,在MyEclipse的控制臺將看到:

獲取客戶端HTTP請求頭的方法有哪些

通過getRemoteAddr方法可以獲取訪問該web應(yīng)用的客戶端IP地址。

代碼:

System.out.println(request.getRemoteAddr());

而通過getRemoteHost方法獲取的是訪問該web應(yīng)用的客戶端主機名,如果沒有在DNS服務(wù)器上注冊的則是獲取IP地址。這里說的主機名是指在DNS上注冊的,比如www.baidu.com,那么通過該方法如果從該主機上來訪問,則獲取到的是:baidu.com。

上述內(nèi)容就是獲取客戶端HTTP請求頭的方法有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI