Как обратиться к другому сайту из страницы 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 :-)