我正在尝试使用csharp.bitbucket库制作一些bitbucket api请求。我有一些代码,它获取一个请求令牌,然后建立一个验证URL。身份验证网址类似于
https://bitbucket.org/api/1.0/oauth/authenticate/?oauth_token=xxxxxx
其中xxxxx是我已通过bitbucket api检索的令牌。
我遇到的问题是当我尝试使用webclient下载url时,即使我传递了授权标题,我总是会获得bitbucket登录页面。当我使用邮递员点击验证网址并通过相同的令牌和授权标头时,一切正常。我的代码如下所示:
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;
}
}
}
看起来像webclient的身份验证部分不起作用,因为当我进行DownloadString调用时,我得到了bitbucket登录页面。
之前有人见过这个吗?
提前致谢
伊斯梅尔
答案 0 :(得分:1)
因此,在回答我自己的问题后,在看到小提琴手和邮差之后,我可以看到,在调用身份验证时,它正在执行301重定向并丢失授权标头,因此我更新了我的代码以点击它尝试301的URL
因此,在传递我的令牌和授权标头时,我会直接进行身份验证而不是身份验证,现在一切正常。这一切都习以为常,但我认为在bitbucket结束时他们已经改变了一些东西,因此破坏了。
所以问题是301重定向丢失已设置的授权标头。希望这有助于某人。
伊斯梅尔