在Android中使用httpUrlConnection发送授权标头

时间:2013-02-05 23:17:01

标签: java android

我正在尝试在使用HttpUrlConnection时设置“Authorization”标头,但我在服务器上将其视为“HTTP_AUTHORIZATION”。

这是我的代码:

public static String doGet(String params, String accessToken)
            throws MHNetworkException {
        try {
            URL url = new URL(getServerUrl());

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Authorization", "Token token="
                    + accessToken);
            conn.setRequestMethod("GET");

            int httpStatus = conn.getResponseCode();
            Log.v(tag, "httpStatus " + httpStatus);

            if (httpStatus == 200) {
                return MHIOUtil.getInputStreamAsString(conn.getInputStream());
            } 
        } catch (MalformedURLException me) {

        } catch (IOException ioe) {

        }
    }

BTW“Content-Type”标题也被更改为CONTENT_TYPE。

为什么Android发送更改它,是否有任何方式让我以我想要的方式发送它。或者我在这里做错了什么?如果重要的话,我们在后端使用nginx和Rails。

请不要建议使用HttpClient。我只是想使用HttpURLConnection,如果我可以让它工作,因为谷歌的Android开发者说他们将把所有的努力都投入到HttpURLConnection。

谢谢。

1 个答案:

答案 0 :(得分:2)

没有错。大多数标题都可以在前缀为HTTP_的服务器上访问,但Content-Type是专门处理的。 Android没有改变它,映射正在服务器上发生。映射到大写是标准的(标题的情况并不重要),将“ - ”替换为“_”。

请参阅CGI specification