HttpURLConnection中不尊重AddRequest
我试图将"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());
瞧这改变了主机头“测试”。添加新的请求属性和修改旧的请求属性有什么区别?
这样的事情对我的作品: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);
我知道这是一个古老的问题,原来的海报可能已经移动,但这个答案是对于似乎有同样问题的任何人(像我一样)。
问题可能根本不在HttpURLConnection
之内。它可能与标题的名称和服务器的配置有关。我运行了类似的测试,比如暂停执行,并检查我添加的头文件是否设置在HttpURLConnection
(它是),更改另一个自动添加的头文件的值(它确实有效),并更改了名称头部加入了一些测试名称,如XYZ,这些名称都起作用;我能够检索服务器端的值。还有一个,我使用HTTP工具来设置标题并发送请求。如果我更改标题的名称,这也只会起作用。
因此,就我而言,问题出在服务器端。出于某种原因,Apache或PHP正在删除标题。所以作为一种解决方法/解决方案,我在Apache配置中添加了以下指令:
RewriteCond %{HTTP:Header_Name} (.+)
RewriteRule .* - [env=HTTP_HEADER_NAME:%1]
我使用httpurlconnection而不是httppost。这是推荐的类在Android – jiduvah 2014-10-31 13:59:05
mmh的更高版本...使用HttpClient,这样你就可以控制HTTP结果代码,标头,饼干,aaaaaall常见的东西 – eduyayo 2014-10-31 14:00:21
安卓团队建议使用httpurlconnection它有相同的和更多功能http://android-developers.blogspot.de/2011/09/androids-http-clients。html 我宁愿修复这个问题,而不是实施一个非常大的工作,围绕 – jiduvah 2014-10-31 14:04:52