簡體   English   中英

HttpServletRequest#getHeader(“User-Agent”) 返回空瀏覽器名稱

[英]HttpServletRequest#getHeader(“User-Agent”) returns null browser name

我使用的是 Java 6。我對 JSP 和 Servlet 的了解很少。

我正在使用以下代碼獲取運行我的應用程序的瀏覽器名稱:

String browserName = requestProvider.get().getHeader("User-Agent");

此外,我使用以下代碼獲取運行我的應用程序的機器的 IP 地址:

String ipAdd = requestProvider.get().getRemoteAddr();

在這兩種情況下requestProvider都是Provider<HttpServletRequest>類型的引用變量。 而且我確信它永遠不會NULL

現在問題是有時我得到兩個值( browserName and ipAdd )NULL。 我有時會寫,因為我沒有測試用例。

所以我的問題是,當這些值可以為 NULL 時,Java 中的情況是什么?

為了避免這個問題,我在編碼時應該注意什么?

是否有任何其他方法可以每次獲取 IP 地址和瀏覽器名稱?

String browserName = requestProvider.get().getHeader("User-Agent");

null表示發送請求的人不包含“User-Agent”標頭

String ipAdd = requestProvider.get().getRemoteAddr();

在正常情況下不太可能返回 null,但有報告說它可能會在邊緣情況下返回,比如在響應已經發送之后 無論如何,“獲取運行我的應用程序的機器的 IP 地址”聽起來不像getRemoteAddr()的用途。 它用於獲取最近發送請求的客戶端或代理的地址。

是否有任何其他方法可以每次獲取 IP 地址和瀏覽器名稱?

不。您完全依賴於 HTTP 客戶端和/或任何干預代理的行為來獲取此類信息。

嘗試使用小寫的用戶代理,因為如果我們直接從頭訪問它就可以工作。

String browserName = requestProvider.get().getHeader("user-agent");

獲取IP地址的替代方法是

String ip = requestProvider.get().getHeader("True-Client-IP"); 如果我們有 akamai 整數化,這會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM