从具有基本身份验证的比特桶下载字符串
本文关键字:下载 字符串 身份验证 | 更新日期: 2023-09-27 18:28:32
我正在尝试使用csharp.bitbucket库发出一些bitbucket api请求。我有一些代码,它获取一个请求令牌,然后建立一个身份验证url。身份验证url看起来有点像
https://bitbucket.org/api/1.0/oauth/authenticate/?oauth_token=xxxxxx
其中xxxxx是我的令牌,我已经通过比特桶api检索到了它。
我遇到的问题是,当我尝试使用Web客户端下载url时,即使我正在传递授权标头,我也总是会得到比特桶登录页面。当我使用poster点击authenticate url并通过相同的令牌和授权标头时,一切都正常。我的代码如下:
using (var wc = new CookieWebClient(_username, _password))
{
pageText = wc.DownloadString(url);
}
CookieWebClient类看起来像
public class CookieWebClient : WebClient
{
public CookieContainer m_container = new CookieContainer();
public WebProxy proxy = null;
public CookieWebClient(string authenticationUser,string authenticationPassword)
{
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(authenticationUser + ":" + authenticationPassword));
Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
}
protected override WebRequest GetWebRequest(Uri address)
{
try
{
ServicePointManager.DefaultConnectionLimit = 1000000;
WebRequest request = base.GetWebRequest(address);
request.Proxy = proxy;
var webRequest = request as HttpWebRequest;
webRequest.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
webRequest.PreAuthenticate = true;
webRequest.AllowAutoRedirect = true;
webRequest.Pipelined = true;
webRequest.KeepAlive = true;
if (webRequest != null)
{
webRequest.CookieContainer = m_container;
}
return webRequest;
}
catch
{
return null;
}
}
}
通过web客户端的身份验证部分似乎不起作用,因为当我调用DownloadString时,我会得到bitbucket登录页面。
有人见过这个吗?
提前感谢
Ismail
因此,在回答我自己的问题时,在查看了fiddler和poster之后,我可以看到,当调用authenticate时,它正在进行301重定向并丢失授权标头,因此我更新了代码,以达到它试图301的url。
因此,我在传递令牌和授权标头时直接授权,而不是进行身份验证,现在一切都正常了。这一切过去都是有效的,但我认为在比特桶的一端,它们已经改变了一些东西,因此出现了断裂。
所以问题是301重定向丢失已设置的授权标头。希望这能帮助到别人。
Ismail