2014-10-31 117 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]