Взаимодействие с другими сайтами через С#

Тема в разделе "WASM.BEGINNERS", создана пользователем Григорий, 19 май 2010.

  1. Григорий

    Григорий New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    32
    Привет всем! Вот пробую написать програмку для взаимодействия с сайтом МирТесен. И возникла трудность. Когда произвожу авторизацию, на сайте производится redirect. Я в програмке это отлавливаю, перед редиректом получаю куки и далее пробую перейти на страницу на которую перенаправляет сайт. И в этот момент получаю ошибку по таймауту.
    Код (Text):
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.Net;
    5. using System.IO;
    6.  
    7. namespace PiarSite
    8. {
    9.     class Program
    10.     {
    11.         static string sURL="http://mirtesen.ru/";
    12.         static void Main(string[] args)
    13.         {
    14.             HttpWebRequest myHttpWebRequest;
    15.             HttpWebResponse myHttpWebResponse;
    16.             string sCookies = "";
    17.  
    18.             myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(sURL);
    19.             myHttpWebRequest.Headers.Add("Accept-Language", "ru");
    20.  
    21.             //Запрос на sURL
    22.             myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    23.  
    24.             //получаем куки, которые возвратил sURL
    25.             if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))
    26.             {
    27.                 sCookies = myHttpWebResponse.Headers["Set-Cookie"];
    28.             }
    29.             //------(Получаем cookies сайта)
    30.  
    31.             // авторизация на sURL
    32.             myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(sURL+"login");
    33.             myHttpWebRequest.Method = "POST"; // метод POST
    34.             myHttpWebRequest.Referer = sURL;
    35.             myHttpWebRequest.Headers.Add("Accept-Language", "ru");
    36.             myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
    37.  
    38.             // передаем куки, полученные в предыдущем запросе
    39.             if (!String.IsNullOrEmpty(sCookies))
    40.             {
    41.                 myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies);
    42.             }
    43.  
    44.             //ставим False, чтобы при получении кода 302 не делать автоматический редирект
    45.             myHttpWebRequest.AllowAutoRedirect = false;
    46.  
    47.             //передаем параметры
    48.             string sQueryString = "auth[backurl]=http://mirtesen.ru/&auth[login]=login&auth[password]=password";
    49.             byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
    50.  
    51.             myHttpWebRequest.ContentLength = ByteArr.Length;
    52.             myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
    53.  
    54.             //выполняем запрос
    55.             myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    56.  
    57.             //получаем куки, которые возвратил sURL
    58.             if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))
    59.             {
    60.                 sCookies = myHttpWebResponse.Headers["Set-Cookie"];
    61.             }
    62.             //------(Получаем cookies сайта)
    63.            
    64. [b]            //найден новый url тот самый редирект[/b]
    65.             string sLocation = myHttpWebResponse.Headers["Location"];
    66.             if (!String.IsNullOrEmpty(sLocation))
    67.             {
    68.                 // получам куки
    69.                 sCookies = "";
    70.                 if (!String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]))
    71.                 {
    72.                     sCookies = myHttpWebResponse.Headers["Set-Cookie"];
    73.                 }
    74.                 // формируем запрос
    75.  
    76.                 myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(sLocation);
    77.                 myHttpWebRequest.Referer = sURL;
    78.                 myHttpWebRequest.Headers.Add("Accept-Language", "ru");
    79.                 myHttpWebRequest.ContentType = "text/plain";
    80.                 if (!String.IsNullOrEmpty(sCookies))
    81.                 {
    82.                     myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies);
    83.                 }
    84.  
    85.                 // выполняем запрос
    86.                 myHttpWebRequest.AllowAutoRedirect = false;
    87. [b]                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); //таймаут[/b]
    88.  
    89.                 // смотрим, делается ли редирект JavaScrip-ом
    90.                 if (new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251)).ReadToEnd().IndexOf("window.location.replace") > 0)
    91.                 {
    92.                     // входим в сервис
    93.                     myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(sURL);
    94.                     myHttpWebRequest.Referer = sURL + sLocation;
    95.                     myHttpWebRequest.Headers.Add("Accept-Language", "ru");
    96.                     myHttpWebRequest.ContentType = "text/html; charset=windows-1251";
    97.                     if (!String.IsNullOrEmpty(sCookies))
    98.                     {
    99.                         myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies);
    100.                     }
    101.                     // выполняем запрос
    102.                     myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    103.                 }
    104.                 else
    105.                 {
    106.                     Console.WriteLine("Данные не найдены..\r\nНажмите любую клавишу для заврешения");
    107.                     Console.ReadKey();
    108.                     return;
    109.                 }
    110.             }
    111.             myHttpWebRequest.Abort();
    112.             myHttpWebResponse.Close();
    113.             //-----(Логинимся при необходимости)
    114.  
    115.         }
    116.     }
    117. }
    Если я перед редиректом напишу
    myHttpWebRequest.Abort();
    myHttpWebResponse.Close();

    то таймаута нет, в чем косяк не пойму. Подскажите пожалуйста
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Григорий
    есть мнение что вы ошиблись форумом
     
  3. InsidE

    InsidE Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    357
    Адрес:
    Over the hills and far away...
    однако да,сильно ошиблись...
     
  4. Григорий

    Григорий New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    32
    Главное страной не ошибся, остальное решаемо:)))