如何使用android的httpURLconnection设置授权标头

问题描述 投票:4回答:1

我正在尝试使用基本身份验证连接到服务器,但是当我设置Authorization标头时,它将导致getInputStream抛出fileNotFound异常。

这里是相关代码:

        URL url = new URL(myurl);
        //set up the connection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);//this is in milliseconds
        conn.setConnectTimeout(15000);//this is in milliseconds
        String authHeader = getAuthHeader(userID,pass);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.setRequestProperty("authorization", authHeader);
        //starts the query
        conn.connect();
        int response = conn.getResponseCode();
        is = conn.getInputStream(); //throws the fileNotFound exception

这里是抛出的异常:

java.io.FileNotFoundException: http://<myIPaddress>/login/

非常奇怪,如果我尝试将request属性设置为“ authorization”或“ Authorization”或该单词的任何变体,则将抛出fileNotFound异常。如果将其设置为“ content-type”或“ authosodifjsodfjs”(随机字符串),则抛出not,如下所示:conn.setRequestProperty("content-type",authHeader)//no exception thrown conn.setRequestProperty("authosodifjsodfjs",authHeader)//no exception thrown

如果不设置此标头,则可以使用此代码连接到服务器,并获得期望的正确访问拒绝消息。如果我使用python的“请求”模块,我还可以连接到服务器并正确登录,因此服务器不是问题。

所以我的问题如下:

1)将request属性设置为“ authorization”时,如果做错了什么?如何正确设置auth标头?

2)如果这是HttpURLConnection的错误,如何提交错误报告?

谢谢。

编辑:建议从以下位置切换:

conn.setRequestProperty("Authorization", authHeader);

至:

conn.addRequestProperty("Authorization", authHeader);

这不能解决问题。它仍然抛出相同的异常。

编辑:仍然不确定为什么“授权”和“授权”会导致fileNotFounExceptions,但是使用所有大写字母似乎可以正常工作。这是闪亮的新工作代码:

conn.setRequestProperty("AUTHORIZATION",authHeader);

所以看起来它应该全部大写。 “ HTTP_”将自动添加到此标头的前面,因此服务器将看到的标头是“ HTTP_AUTHORIZATION”,它应该是该标头。

我正在尝试使用基本身份验证连接到服务器,但是当我设置Authorization标头时,它将导致getInputStream抛出fileNotFound异常。以下是相关代码:...

android httpurlconnection filenotfoundexception basic-authentication
1个回答
10
投票
这里是设置授权标头的我的OAuth代码的一部分:
© www.soinside.com 2019 - 2024. All rights reserved.