
Как делать GET/POST-запросы к интернет-страницам в C#? Элементарно!
Отправка GET-запросов
Здесь все просто — создаем новый объект WebRequest, в конструктор которого передаем URL-адрес нужной страницы, получаем ответ методом GetResponse (). Читаем поток ответа сервера и делаем с ним что дуже угодно
System.Net.WebRequest reqGET = System.Net.WebRequest.Create(@"http://site.ru/"); System.Net.WebResponse resp = reqGET.GetResponse(); System.IO.Stream stream = resp.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(stream); string s = sr.ReadToEnd(); Console.WriteLine(s);
Отправка POST-запросов
Здесь немного сложнее. Перед отправкой данных необходимо объекту WebRequest задать ряд опций, определяющих метод запроса и тип содержимого. Затем необходимо закодировать отправляемые данные и записать их в поток запроса. После этого можно прочитать поток ответа.
System.Net.WebRequest reqPOST = System.Net.WebRequest.Create(@"http://site.ru/send.php");
reqPOST.Method = "POST"; // Устанавливаем метод передачи данных в POST
reqPOST.Timeout = 120000; // Устанавливаем таймаут соединения
reqPOST.ContentType = "application/x-www-form-urlencoded"; // указываем тип контента
// передаем список пар параметров / значений для запрашиваемого скрипта методом POST
// здесь используется кодировка cp1251 для кодирования кирилицы и спец. символов в значениях параметров
// Если скрипт должен принимать данные в utf-8, то нужно выбрать Encodinf.UTF8
byte[] sentData = Encoding.GetEncoding(1251).GetBytes("message=" + System.Web.HttpUtility.UrlEncode("отправляемые данные", Encoding.GetEncoding(1251)));
reqPOST.ContentLength = sentData.Length;
System.IO.Stream sendStream = reqPOST.GetRequestStream();
sendStream.Write(sentData, 0, sentData.Length);
sendStream.Close();
//System.Net.WebResponse result = reqPOST.GetResponse();
И на последок пара бонусов:
Базовая HTTP-авторизация
System.Net.WebClient wc = new System.Net.WebClient();
wc.Credentials = new System.Net.NetworkCredential("usr", "mypassword");
byte[] response = wc.DownloadData("http://localhost/testlogin");
Использование куков
CookieContainer cookies = new CookieContainer(); Request.CookieContainer = cookies; // И после каждого запроса обновляем контейнер: cookies = Request.CookieContainer;
Не получается отправить запрос по методу POST.
все делаю как написано, но ничего не происходит.
$name = isset($_POST['Name'])?$_POST['Name']:'123'; $sql= "INSERT INTO boi ( `id` , `id_user` , `name`) VALUES ( NULL, '0', $name)"; mysql_query($sql); mysql_close($dbcnx); echo "$name";те если форма пустая в таблицу добавляется запись с именем 123, а если не пустая то с тем что есть.
так вот новая запись не добавляется вообще
Посмотрите содержимое ответа сервера.
Может этот Ваш PHP-скрипт содержит ошибки, или сервер отдает совершенно не ту страницу.
А также проверьте кодировку страницы со скриптом
А как передать через post файл, т.е. есть на странице форма выбота файла.
Кстати, спасибо за статью, а то я сразу с вопросами полез и не отметил, что она мне помогла ))
Как-то так:
А как быть если я хочу сделать post запрос к сайту написаному на asp.net webforms? там вроде какая-то проблема с _VIEWSTATE есть
Ага, есть.
Чтобы его обработать нужно сделать следующее:
1. получить содержимое страницы с формой;
2. Регулярными выражениями выдернуть из формы содержимое скрытого поля __VIEWSTATE (о регулярных выражениях );
3. Добавить полученное значение __VIEWSTATE к передаваемым данным.
Здравствуйте, спасибо статья очень помогла, но вот вопрос возник, как отловить что произошла ошибка 404?
Если произойдет 404, то WebRequest должен сгенерировать соответствующий WebException:
Спасибо большое за помощь
Все сделал, как мне советовал Кто-то, но почему-то такой запрос работает через раз((
Очень часто сервер возвращает ошибку 500.
Может что-то еще надо добавить в запрос?
500 — это внутренняя ошибка сервера. Проблемы на стороне сервера.
Добрый день!
А как можно отдельно отображать капчу в веббраузере виндовс формс. Или получить сессию капчи?
спасибо
А не подскажете, каким образом можно принять какую нибудь информацию от сервера, к примеру 2 переменные. Заранее благодарен
Валентин, элементарно! Получаете ответ сервера в строку и разпарсиваете ее как душе угодно. Или я что-то не понимаю?
Хотел поблагодарить за полезную заметку!
Правда возникла проблема, надеюсь тема еще жива и Вы сможете подсказать решение или что и где почитать.
Консольное приложение под 2-м фреймворком, на строке
System.Net.WebRequest MyRequest = System.Net.WebRequest.Create(@"http://any.url/");вылетает с ошибкой
Request for the permission of type 'System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.Программе запрещено отправлять запросы в сеть какими-то внутренними политиками системы.
Сам с таким не сталкивался, но судя по всему нужно в панели администрирования подкрутить что-то в Microsoft .NET Framework Configuration. Вот хелп —
А подскажите пожалуйста, как это всё будет выглядеть на С++ ?
В C++ для .NET? Или WinAPI? Или что-то универсальное?
Тут подходов много, все зависит от используемых технологий.
Привет! У меня такой вопрос
Сам я только учусь кодить в си шарпе...
вот есть такая штука
как мне передать этой страшной штуке через пост данные... к примеру я хочу отправить имя: User пароль: User
странно но почемуто нету моего хтмл кода который я вам отправил
как-то так:
byte[] sentData = Encoding.GetEncoding (1251).GetBytes («user=User&pass=User»)
просто у меня такое чудо
method="post" onsubmit="md5hash (vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)"
и как туда отправить данные я не знаю))
byte[] sentData = Encoding.GetEncoding (1251).GetBytes («vb_login_password=user&vb_login_md5password=user»);
ооо, тут Вам сначала нужно проанализировать что делает функция md5hash и перед отправкой выполнять то, что делает она. Судя по названию она скорее всего считает md5 пароля и отправляет его (md5), а не сам пароль.
А вообще подумайте о
Пытаюсь пройти авторизацию на твиттер. Ничего не получается. action="https://..." что делать?
А что пишет? Какие ошибки появляются?
Спасибо за пост, очень заинтересовало, но как только ни старался — не смог сделать отправку картинки, можете показать как сделать заливку картинки методом POST через такую вот форму
_http://img.aengine.ru/index.php
Заранее спасибо!
Предыдущий вопрос снят, но возник новый вопрос, как можно средствами C# определить mime-тип файла ?
Здравствуйте, помогите пожалуйста пройти авторизацию OAuth на гитхабе.
Не могу разобраться с кодом
Если возможно ткните носом или примерный код.
Заранее спасибо.
Marker, как-то так:
private string MimeType (string Filename)
{
string mime = «application/octetstream»;
string ext = System.IO.Path.GetExtension (Filename).ToLower ();
Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey (ext);
if (rk != null && rk.GetValue («Content Type») != null)
mime = rk.GetValue («Content Type»).ToString ();
return mime;
}
Владимир, Посмотрите вот тут —
Кто-то, спасибо, разобрался.
А вот так можно выполнить HTTP GET запрос в ASP.NET:
Uri uri = new Uri («http://site.ru/page.aspx»);
if (uri.Scheme = Uri.UriSchemeHttp) {
HttpWebRequest request = HttpWebRequest.Create (uri);
request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = request.GetResponse ();
StreamReader reader = new StreamReader (response.GetResponseStream ());
string tmp = reader.ReadToEnd ();
response.Close ();
Response.Write (tmp);