3

我正在尝试在使用 HttpUrlConnection 时设置“授权”标头,但我在服务器上将其视为“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) {

        }
    }

顺便说一句,“Content-Type”标头也被更改为 CONTENT_TYPE。

为什么 Android 发送更改它,有什么方法可以让我完全按照我想要的方式发送它。还是我在这里做错了什么?如果这很重要,我们会在后端使用 nginx 和 Rails。

请不要推荐使用 HttpClient。我只想使用 HttpURLConnection,如果我可以让它工作,因为谷歌的 Android 开发人员说他们将把所有的努力都放在 HttpURLConnection 上。

谢谢你。

4

1 回答 1

2

没有任何错误。大多数标头都可以在以 HTTP_ 为前缀的服务器上访问,但 Content-Type 会被特殊处理。Android 没有改变它,映射发生在服务器上。到大写的映射是标准的(标题的大小写不重要),将“-”替换为“_”也是如此。

请参阅CGI 规范

于 2013-02-06T00:16:44.733 回答