[C#] Проблема с авторизацией в twitter

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by [SMD], 24 Sep 2012.

  1. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    Привет всем! Пытаюсь авторизоваться на твиттере уже битый час.. и ничего не получается
    Думаю, что скорее всего проблема с https. Именно для https прописал сертификат в коде, вроде все по правилам..
    Извините за быдляцкий подход к парсингу "Удачной авторизации", но Lacation мне почему то выдавал пустое значение, так бы сделал через него.
    И по мимо всего подскажите - что сделать с кодировкой конечной странички, чтобы привести ее в нормальный вид?

    Заранее очень благодарен.

    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Threading;
    using System.Web;
    using System.Security.Cryptography.X509Certificates;
    
    namespace Twit_chenge_nick_to_ask
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                Console.WriteLine("Enter для старта");
                Console.ReadKey();
    
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://twitter.com/download/?lang=ru&logged_out=1");
                request.Credentials = CredentialCache.DefaultCredentials;
                X509Certificate cer = X509Certificate.CreateFromCertFile("twitter.cer");
                request.ClientCertificates.Add(cer);
    
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                string html = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
    
    
                string pattern_auth = "<input type=\"hidden\" value=\"(.*)\" name=\"authenticity_token\"/>";
                Regex regex_auth = new Regex(pattern_auth);
                Match match_auth = regex_auth.Match(html);
                string sCookies = "";
                sCookies = response.Headers["Set-Cookie"];
                //Console.WriteLine(sCookies);
    
                ////////////
                HttpWebRequest myHttpWebRequest1 = (HttpWebRequest)HttpWebRequest.Create("https://twitter.com/sessions");
              
    
                myHttpWebRequest1.Credentials = CredentialCache.DefaultCredentials;
                myHttpWebRequest1.ClientCertificates.Add(cer);
    
    
                myHttpWebRequest1.Method = "POST";
                myHttpWebRequest1.Referer = "https://twitter.com/download/?lang=ru&logged_out=1";
                myHttpWebRequest1.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1";
                myHttpWebRequest1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                myHttpWebRequest1.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
                myHttpWebRequest1.ContentType = "application/x-www-form-urlencoded";
                myHttpWebRequest1.Headers.Add(HttpRequestHeader.Cookie, sCookies);
    
    
                string sQueryString = HttpUtility.UrlEncode("session%5Busername_or_email%5D=LOGIN&session%5Bpassword%5D=PASS&remember_me=1&scribe_log=&redirect_after_login=&authenticity_token=" + match_auth.Groups[1].ToString());
             
                
                byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
                myHttpWebRequest1.ContentLength = ByteArr.Length;
                myHttpWebRequest1.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
    
                // делаем запрос
                HttpWebResponse myHttpWebResponse1 = (HttpWebResponse)myHttpWebRequest1.GetResponse();
                html = new StreamReader(myHttpWebResponse1.GetResponseStream()).ReadToEnd();
    
                string pattern_auth1 = "<button id=\"global-(.*)-tweet-button\" type=\"button\" class=\"btn btn-tweet js-global-new-tweet js-hover js-tooltip\" data-placement=\"bottom\" data-component-term=\"new_tweet_button\" title=\"";
                Regex regex_auth1 = new Regex(pattern_auth1);
                Match match_auth1 = regex_auth.Match(html);
                //match_auth1.Groups[1].ToString()
    
                if (match_auth1.Groups[1].ToString() == "new") { Console.WriteLine("Авторизовались!"); }
    
    
                System.IO.File.AppendAllText("html.txt", html + "\n");
            }
        }
    }
    
     
  2. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    А почему нельзя использовать API ? У твиттера одно из самых удобных и простых.
     
  3. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    вообще хотелось бы закончить начатое..

    по части апи: я все верно нашел?
    https://dev.twitter.com/docs/api/1.1
    и хотелось бы посомтреть на пример авторизации через апи.
     
  4. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Нелогично при наличии хороших инструментов, поддерживаемых самими разработчиками twitter.

    К сожалению, на C# не могу скинуть примеры, писал на php.
    Но на хабре есть хорошая статья http://habrahabr.ru/post/103365/
     
  5. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    читал только что подобную статью на хабре http://habrahabr.ru/post/86846/
    если честно, я видимо чего-то не понимаю, но блин_) тут я не увидел ни одного параметра где нужен логин и пароль от аккаунта) только токены и секретные ключи с пинами)
     
  6. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Так в этом и смысл API. Человек даёт разрешение на использование своего аккаунта твоим приложением, ты получаешь токен, с помощью него "общаешься" с аккаунтом. Никаких логинов\паролей.
     
  7. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    Спасибо, будем разбираться с апи..
     
  8. FunOfGun

    FunOfGun Elder - Старейшина

    Joined:
    5 Sep 2012
    Messages:
    388
    Likes Received:
    72
    Reputations:
    124
    Писал чекер для себя когда-то, вот кусочки с него(vb.net):
    http://pastebin.com/DmexTGdF (базовый функционал чекера)
    http://pastebin.com/NZ8hBpC4 (небольшой класс, имитирующий браузер. Криво написан, но работает)
    Надеюсь поможет.
     
  9. BestProxies

    BestProxies New Member

    Joined:
    9 Aug 2012
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    ТС, может проблема в этом?

    http://www.infernodevelopment.com/expect-100-continue-header-twitter-api-error-using-php-curl