使用查询和摘要http授权获取GET请求

时间:2009-05-07 17:49:11

标签: httpwebrequest get digest-authorisation

我有需要使用的java服务(不能修改它)和使用摘要HTTP授权的Web服务器。我正在使用HttpWebRequest与服务器通信(使用GET方法)。提供了身份验证所需的NetworkCredentials。但是调用GetResponse()会生成错误400(错误请求)。

地址:http://info.server.com/someFolder/servlet.do?cmd=get_info&param=value

请求示例(不完整,只有相关内容):

获取/someFolder/servlet.do?cmd=get_info&param=value HTTP / 1.1

主持人:info.server.com

回复:401需要授权

第二次请求:

获取/someFolder/servlet.do?cmd=get_info&param=value HTTP / 1.1

主持人:info.server.com

授权:Digest ... uri =“/ someFolder / servlet.do”......(显然不完整标题)

第二次回复:400错误请求

我已经尝试过使用Web浏览器(IE,Firefox)的这个请求并且它可以工作,但似乎浏览器将整个请求uri放在Authorization标头的uri部分中,而HttpWebRequest如上所述格式化标头。 有谁知道如何强制HttpWebRequest将整个uri放在Authorization标头中? 或许这个问题还有另外一个解决方案?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

4GuysFromRolla的这篇文章似乎描述了为HttpWebRequest实现基本和摘要式身份验证。

http://www.4guysfromrolla.com/articles/102605-1.aspx

答案 1 :(得分:0)

我们遇到了同样的问题,并将其跟踪到Authorization标头中的URL。看起来HttpWebRequest只发送主机名而不是完整的URL。它省略了:

?cmd=get_info&param=value

来自网址。 IE8和Chrome都使用完整的URL,包括参数。

我们已经能够通过摘要授权的自定义实现来解决这个问题。请参阅this answer