从具有基本身份验证的比特桶下载字符串

本文关键字:下载 字符串 身份验证 | 更新日期: 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