2014-10-31 120 views
1

我試圖將"Accept-Language" header附加到我正在獲取的請求中,但是當我使用Charles Proxy檢查請求時,那麼標頭不在那裏。我像這樣添加標題。HttpURLConnection中不尊重AddRequest

private HttpURLConnection getConnection(Uri uri) throws Exception { 
    URL url = new URL(uri.toString()); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setDoInput(true); 
    urlConnection.addRequestProperty(ACCEPT_LANGUAGE_HEADER, LanguageProvider.getLanguage()); 
    return urlConnection; 
} 

奇怪的是,如果我添加後記錄requestproperties然後我可以看到它在HttpURLConnection中設置。爲什麼在發送之前將其刪除?

UPDATE

我注意到下面的標題,其中自動添加

主機appname-api-staging.herokuapp.com

的User-Agent的Dalvik/1.6.0(Linux的; U; Android 4.3.1; Galaxy Nexus Build/JLS36I)

代理連接保持活動

我修改了代碼,試圖改變用戶代理等等之類

URL url = new URL(uri.toString()); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setDoInput(true); 
    urlConnection.addRequestProperty("User-Agent", "test"); 
    urlConnection.setRequestProperty(ACCEPT_LANGUAGE_HEADER, LanguageProvider.getLanguage()); 

瞧這改變了主機頭「測試」。添加新的請求屬性和修改舊的請求屬性有什麼區別?

回答

0

這樣的事情對我的作品:httppost.setHeader("Accept", "application/json");

因此,你應該做的httppost.setHeader(ACCEPT_LANGUAGE_HEADER, "es_ES")如果u想讀堂吉訶德原始語言...:P

順便說一句,我使用的HttpClient:

 HttpParams httpParameters = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters, HTTP_CON_TIMEOUT); 
     HttpConnectionParams.setSoTimeout(httpParameters, HTTP_CON_TIMEOUT); 

     HttpClient httpclient = new DefaultHttpClient(httpParameters); 
HttpGet httpGet = new HttpGet(baseUrl); 
     httpGet.setHeader("Accept", "application/json"); 

     HttpResponse response = httpclient.execute(httpGet); 
+0

我使用httpurlconnection而不是httppost。這是推薦的類在Android – jiduvah 2014-10-31 13:59:05

+0

mmh的更高版本...使用HttpClient,這樣你就可以控制HTTP結果代碼,標頭,餅乾,aaaaaall常見的東西 – eduyayo 2014-10-31 14:00:21

+0

安卓團隊建議使用httpurlconnection它有相同的和更多功能http://android-developers.blogspot.de/2011/09/androids-http-clients。html 我寧願修復這個問題,而不是實施一個非常大的工作,圍繞 – jiduvah 2014-10-31 14:04:52

0

我知道這是一個古老的問題,原來的海報可能已經移動,但這個答案是對於似乎有同樣問題的任何人(像我一樣)。

問題可能根本不在HttpURLConnection之內。它可能與標題的名稱和服務器的配置有關。我運行了類似的測試,比如暫停執行,並檢查我添加的頭文件是否設置在HttpURLConnection(它是),更改另一個自動添加的頭文件的值(它確實有效),並更改了名稱頭部加入了一些測試名稱,如XYZ,這些名稱都起作用;我能夠檢索服務器端的值。還有一個,我使用HTTP工具來設置標題併發送請求。如果我更改標題的名稱,這也只會起作用。

因此,就我而言,問題出在服務器端。出於某種原因,Apache或PHP正在刪除標題。所以作爲一種解決方法/解決方案,我在Apache配置中添加了以下指令:

RewriteCond %{HTTP:Header_Name} (.+) 
RewriteRule .* - [env=HTTP_HEADER_NAME:%1]