簡體   English   中英

為什么我不能設置Java http User-Agent?

[英]Why can't I set Java http User-Agent?

我試圖這樣設置HTTP請求的用戶代理:

public BufferedReader readURL(String url){
        URL urlcon;
        BufferedReader in = null;
        try {
            urlcon = new URL(url);
            connection = (HttpURLConnection)urlcon.openConnection();

            System.setProperty("http.agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
            connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)");
            System.out.println(connection.getHeaderField("User-Agent"));
            connection.connect();
            in = new BufferedReader(
                                    new InputStreamReader(
                                        connection.getInputStream()));

            String header = connection.getHeaderField(0);
            System.out.println(header);
            System.out.println("---Start of headers---");
            int i = 1;
            while ((header = connection.getHeaderField(i)) != null) {
                String key = connection.getHeaderFieldKey(i);
                System.out.println(((key==null) ? "" : key + ": ") + header);
                i++;
            }
            System.out.println(connection.getHeaderField("http.agent"));
            System.out.println("---End of headers---");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return in;
    }

我得到的是User-Agent null:

空值
HTTP / 1.0 200 OK
---標題開始---
服務器:Apache
快取控制:max-age = 10
過期:2011年8月7日,星期日
有所不同:接受編碼
內容類型:text / html
內容長度:163582
日期:2011年8月7日,星期日,格林尼治標准時間
X-清漆:889692780 889684459
年齡:4
連接:保持活動狀態
X線:889692780 70148
通過:1.1 CachOS
空值
---標題結尾---

為什么我不能設置用戶代理?

使用setHeader()而不是setRequestProperty。

設置系統屬性:“ http.agent”將更改您的連接頭:“ User-Agent”,但請注意, 根據文檔,您的Java版本仍寫在其中:

雜項HTTP屬性

http.agent(默認值:“ Java /”)定義在http請求中的User-Agent請求標頭中發送的字符串。

請注意,字符串“ Java /”將附加到屬性中提供的字符串(例如,如果使用-Dhttp.agent =“ foobar”,則如果版本為User-Agent頭將包含“ foobar Java / 1.5.0”) VM的版本為1.5.0)。 啟動時僅檢查一次此屬性。

注意,屬性在啟動時僅被檢查一次,因此您可能要先設置屬性,而不是創建第一個URL並進行連接。

要驗證是否發送了適當的頭,可以使用“ tcpdump ”。 用法:

tcpdump -n dst host stackoverflow.com -vvvv

服務器返回標頭信息。 我猜想“ User-Agent”並不重要,無法返回。 僅僅因為它沒有被返回並不意味着它沒有被發送。

我有一個顯示標題信息的小工具(即HTTPHeader)。 當我對此頁面進行刷新時,它是發送和返回的第一組標題:

GET / questions / 6973981 / why-cant-i-set-java-http-user-agent HTTP / 1.1
接受: /
引薦來源: https ://stackoverflow.com/questions/tagged/java page = 2& sort = newest pagesize = 15
接受語言:en-ca
用戶代理:Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 5.1; Trident / 4.0)
接受編碼:gzip,放氣
主持人:stackoverflow.com
連接:保持活動
Cookie:__utmc = 140029553; __utma = 140029553.1370458634.1310761265.1312727448.1312739618.123; __utmz = 140029553.1312739618.123.123.utmcsr =谷歌| utmccn =(有機)| utmcmd =有機| utmctr =雅虎%20finance%20api%20java; __qca = P0-1025379872-1310761265343; M = 4; USR = T = cEyCYO7bXECF&S = X6DJTj5kuY8H; __utmb = 140029553.15.10.1312739618

HTTP / 1.1 200 OK
緩存控制:公共,最大年齡= 60
內容類型:text / html; 字符集= utf-8的
內容編碼:gzip
過期:星期日,2011年8月7日18:25:43 GMT
上次修改時間:2011年8月7日,星期日,格林尼治標准時間
變化:*
日期:2011年8月7日,星期日,格林尼治標准時間
內容長度:12040

暫無
暫無

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

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