当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用android的httpURLconnection设置授权标头》经验,为你挑选了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:///login/

奇怪的是,我发现只有当我尝试将请求属性设置为"授权"或"授权"或该单词的任何变体时,才会抛出fileNotFound异常.如果我将它设置为"content-type"或"authosodifjsodfjs"(随机字符串),则不会抛出它,如下所示:

conn.setRequestProperty("content-type",authHeader)//no exception thrown
conn.setRequestProperty("authosodifjsodfjs",authHeader)//no exception thrown

如果我没有设置此标头,我可以使用此代码连接到服务器,并获得我期望的正确的访问被拒绝消息.如果我使用python的"请求"模块,我也能够连接到服务器并正确登录,因此它不是服务器的问题.

所以我的问题如下:

1)在将请求属性设置为"授权"时,我做错了什么?如何正确设置auth标头?

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

谢谢.

编辑:建议切换:

conn.setRequestProperty("Authorization", authHeader);

至:

conn.addRequestProperty("Authorization", authHeader);

这并没有解决问题.它仍然抛出同样的例外.

编辑:仍然不确定为什么"授权"和"授权"导致fileNotFounExceptions,但使用所有大写似乎工作正常.这是闪亮的新工作代码:

conn.setRequestProperty("AUTHORIZATION",authHeader);

所以看起来它需要全部上限."HTTP_"将自动添加到此标头的前面,因此服务器将看到的标头是"HTTP_AUTHORIZATION",它应该是它.



1> marcinj..:

以下是我的OAuth代码的一部分,它设置了授权标头:

httpUrlConnection.setUseCaches(false);
httpUrlConnection.setRequestProperty("User-Agent", "MyAgent");
httpUrlConnection.setConnectTimeout(30000);
httpUrlConnection.setReadTimeout(30000);

String baseAuthStr = APIKEY + ":" + APISECRET;
httpUrlConnection.addRequestProperty("Authorization", "Basic " + baseAuthStr);
httpUrlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

httpUrlConnection.connect();


所以我尝试将标题直接设置为"HTTP_AUTHORIZATION",这不起作用,但是看了看服务器正在获取的标题,结果发现android只是将"HTTP_"添加到标题中...无论如何,我改变了标题为"AUTHORIZATION"(全部大写),它神奇地起作用了.我会相信你的答案.谢谢
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有