C# потоки проблема с авторизацией.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by zoke, 15 Aug 2011.

  1. zoke

    zoke Member

    Joined:
    5 Sep 2010
    Messages:
    90
    Likes Received:
    9
    Reputations:
    5
    Использую примерно вот такой код для отправки get запроса
    Code:
    public CookieCollection Cooks = new CookieCollection();
    
            
    
            public string get(string _url, int i, string _proxy)
            {
                try
                {
                    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_url);
                    webRequest.CookieContainer = new CookieContainer();
                    webRequest.AllowAutoRedirect = false;
                    webRequest.Timeout = 30000;
                    if (Cooks != null)
                        webRequest.CookieContainer.Add(Cooks);
                    if (i == 1)
                    {
                        string[] proxyport = _proxy.Split(new char[] { ':' });
                        webRequest.Proxy = new WebProxy(proxyport[0], Convert.ToInt32(proxyport[1]));
                    }
                    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
                    {
                        webResponse.Cookies = webRequest.CookieContainer.GetCookies(webRequest.RequestUri);
                        if (webResponse.Cookies != null)
                            Cooks.Add(webResponse.Cookies);
                        string dataContent = new StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding(1251)).ReadToEnd();
                        string end = webResponse.Headers.ToString();
                        return end + dataContent;
                    }
                }
                catch
                {
                    return null;
                }
            }
    
    программа берёт аккаунт для потока

    Code:
    string acc;
                    lock (this)
                    {
                        acc = accouns[i];
                        i++;
    }
    
    авторизуется
    Code:
    string auth_result = auth(acc);
    И дальше выполняет какие действия, проблема в том что авторизуется под первыми 5-тью аккаунтами (если 5 потоков) и берёт последний аккаунт для всех потоков.

    А каждый поток должен использовать разный аккаунт.

    По идей куки последнего авторизованого аккаунта возвращаются во всех потоки, подскажите как исправить эту проблему?

    Зарание спасибо :)
     
  2. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Я с C# не дружу пока :) но первым дело должна быть Глобальная переменная Int - IndexAccount вытаскиваешь через неё аккаунты так же проверяешь её на кол-во аккаунтов в списке, если она больше то выходишь из потока. Плюс ко всему после каждой проверки аккаунта, чистишь куки, дабы каждый следующий аккаунт получал свои куки.
     
  3. zoke

    zoke Member

    Joined:
    5 Sep 2010
    Messages:
    90
    Likes Received:
    9
    Reputations:
    5
    Такая переменная есть.
    Хотелось бы увидеть на коде - как делают авторизацию с потоками
     
  4. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    не понял, у тебя все 5 потоков используют одни и те же кукисы?
     
  5. zoke

    zoke Member

    Joined:
    5 Sep 2010
    Messages:
    90
    Likes Received:
    9
    Reputations:
    5
    спасибо за совет, помог :)

    p.s раньше забыл отписаться.