getRequestProperty("Authorization") 总是返回 null
Posted
技术标签:
【中文标题】getRequestProperty("Authorization") 总是返回 null【英文标题】:getRequestProperty("Authorization") always returns null 【发布时间】:2011-02-21 06:52:04 【问题描述】:我正在尝试读取 HTTP 请求的授权标头(因为我需要向其中添加一些内容),但标头值总是为 null。其他标题工作正常。
public void testAuth() throws MalformedURLException, IOException
URLConnection request = new URL("http://google.com").openConnection();
request.setRequestProperty("Authorization", "MyHeader");
request.setRequestProperty("***", "anotherHeader");
// works fine
assertEquals("anotherHeader", request.getRequestProperty("***"));
// Auth header returns null
assertEquals("MyHeader", request.getRequestProperty("Authorization"));
我做错了吗?这是“安全”功能吗?有没有办法使用 URLConnection 进行这项工作,还是我需要使用另一个 HTTP 客户端库?
【问题讨论】:
【参考方案1】:正如Devon's answer 正确指出的那样:这不是错误,而是“安全”功能?
但您不必切换到其他库:始终可以通过反射访问底层MessageHeader
-collection 并提取“Authorization”-header 值。
经过一番摸索后,我设法想出了一个有效的snippet here。
【讨论】:
【参考方案2】:显然,这是一项安全“功能”。 URLConnection 实际上是sun.net.www.protocol.http.HttpURLConnection 的一个实例。它将getRequestProperty
定义为:
public String getRequestProperty (String key)
// don't return headers containing security sensitive information
if (key != null)
for (int i=0; i < EXCLUDE_HEADERS.length; i++)
if (key.equalsIgnoreCase(EXCLUDE_HEADERS[i]))
return null;
return requests.findValue(key);
EXCLUDE_HEADERS
数组定义为:
// the following http request headers should NOT have their values
// returned for security reasons.
private static final String[] EXCLUDE_HEADERS =
"Proxy-Authorization",
"Authorization"
;
【讨论】:
这就解释了。以及为什么相同的代码在 Google App Engine 上运行良好(他们使用自己的 HttpUrlConnection 实现)。【参考方案3】:我对额外的依赖关系不满意,但关注suggestion to switch to Commons Http 为我解决了眼前的问题。
我仍然想知道我的原始代码有什么问题。
【讨论】:
【参考方案4】:您是否尝试过使用URLConnection.addRequestProperty()
?
这就是我用来添加 HTTP 请求标头的方式。
【讨论】:
同样的结果:另一个头工作,授权保持为空 您是否尝试过类似request.addRequestProperty("Authorization", "Basic " + hashed("username:password"));
的方法,其中hashed
是字符串的Base64 哈希?看看你的assertEquals
是否返回结果。
即便如此,我还是使用了使用 URLConnection 的 OAuth 身份验证,它对我有用。如果这不起作用,请使用 Apache 的 HTTP 客户端(强烈推荐)。
这应该是对帖子的评论。以上是关于getRequestProperty("Authorization") 总是返回 null的主要内容,如果未能解决你的问题,请参考以下文章
错误:- "code":"403", "message":"HMAC 验证失败"
如何将 ["tag":"google","count":1,"tag":"microsoft",&q
"message":"请求失败,状态码 500","name":"Error","stack":&q
"errors":"errors":["detail":"您无权执行此操作。","code":&qu