Rose debug info
---------------

Как обратиться к другому сайту из страницы ASP.NET.

Как-то давно, для одного сайта было нужно сделать приблуду, которая совершает POST или GET запрос на другой сайт и получает результаты для дальнейшего парсинга.

Слава Microsoft, которая ревностно защищает свои Winforms контролы и не дает использовать Webbrowser в страницах ASP.NET :-D Для этого есть совсем другой механизм: HttpWebRequest

Пример POST-запроса:

string MakeKeepVid(string strUrl)

  {

  HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.megaupload.net/keepvid.php"); //адрес удаленной страницы

  // myHttpWebRequest.Proxy = new WebProxy("127.0.0.1", 8888); //прокси-сервер, через который необходимо провести POST запрос

  myHttpWebRequest.Method = "POST"; //Метод POST / GET

  myHttpWebRequest.Referer = "http://www.keepvid.com"; //Говорим удаленному серверу с какой страницы мы не него попали :-) 

  myHttpWebRequest.UserAgent = "Mozila/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2;"; //Представляемся каким-либо известным браузером

  myHttpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";

  myHttpWebRequest.Headers.Add("Accept-Language", "ru");

 //указываем к какому типу формы мы будем обращаться (для POST запроса)

 //для метода GET myHttpWebRequest.ContentType = "TEXT/HTML"

  myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";

 

 //составляем QueryString в соответствие с полями удаленной формы

  string sQueryString = "url=" + strUrl + "&site=aa";  

 //загоняем запрос в байтовый массив

  byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);

 //обозначаем длину запроса

  myHttpWebRequest.ContentLength = ByteArr.Length;

 //делаем запрос

  myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);

  // читаем ответ удаленного сервера

  HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

  StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding(1251));


  return myStreamReader.ReadToEnd().ToString();

  }

Кстати, стоит сохранить у себя где-то этот кусок кода, если когда-то собираетесь работать с YouTube. Не знаю как они это сделали, но парни молодцы: файл keepvid.php возвращает прямой URL на видеоролик, хранящийся на ферме серверов YouTube :-)