0

Я пытаюсь выполнить некоторые запросы api битбакет, используя библиотеку csharp.bitbucket. У меня есть код, который извлекает токен запроса, а затем создает URL-адрес проверки подлинности. Authenticate URL выглядит какЗагрузите строку из битбакет с базовой аутентификацией

https://bitbucket.org/api/1.0/oauth/authenticate/?oauth_token=xxxxxx 

Где ххххх мой маркер, который я уже извлекаться через Bitbucket апи.

Проблема, с которой я сталкиваюсь, когда я пытаюсь использовать webclient, загружаю url. Я всегда получаю страницу входа в bitbucket, хотя я передаю заголовок авторизации. Когда я ударяю 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; 
     } 
    } 
} 

Похоже Аутентифицировать часть через WebClient не работает becuase, когда я делаю вызов DownloadString я получаю страницу входа Bitbucket.

Кто-нибудь видел это раньше?

Заранее спасибо

Исмаил

+0

немного больше информации об этом при работе с человеком после она попадает /api/1.0/oauth/authenticate/?oauth_token= затем делает 301 редирект/сайт/OAuth1/авторизовать? Oauth_token = заголовок авторизации однако с веб-клиентом после 301 заголовок теряется. – Ismail

ответ

1

Таким образом, в ответ на свой вопрос, посмотрев на стельку и почтальона я мог видеть, что при вызове аутентификации он делает 301 редирект и потери заголовок авторизации, так что я обновил мой код, чтобы попасть в URL-адрес, который он пытался с 301 по.

Так что вместо аутентификации i goto авторизуйтесь напрямую при передаче моего токена и заголовка авторизации, и теперь все работает. Все это работало, однако, я думаю, что в конце битбукет они что-то изменили, поэтому поломка.

Таким образом, проблема заключается в 301 переадресации потери заголовка авторизации, который был установлен. Надеюсь, это поможет кому-то.

Исмаил

Смежные вопросы