使用基本身份验证从bitbucket下载字符串

时间:2015-12-31 09:14:24

标签: c# asp.net authentication webclient http-basic-authentication

我正在尝试使用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登录页面。

之前有人见过这个吗?

提前致谢

伊斯梅尔

1 个答案:

答案 0 :(得分:1)

因此,在回答我自己的问题后,在看到小提琴手和邮差之后,我可以看到,在调用身份验证时,它正在执行301重定向并丢失授权标头,因此我更新了我的代码以点击它尝试301的URL

因此,在传递我的令牌和授权标头时,我会直接进行身份验证而不是身份验证,现在一切正常。这一切都习以为常,但我认为在bitbucket结束时他们已经改变了一些东西,因此破坏了。

所以问题是301重定向丢失已设置的授权标头。希望这有助于某人。

伊斯梅尔