Как вы программно заполняете форму и отправляете POST веб-страницу?

Используя C# и ASP.NET, я хочу программно заполнить некоторые значения (4 текстовых поля) на веб-странице (форме), а затем выполнить POST эти значения. Как мне это сделать?

Обновлено: Уточнение: существует служба (www.stopforumspam.com), где вы можете указать IP-адрес, имя пользователя и адрес электронной почты на их странице добавления. Я хочу иметь возможность создать ссылку / кнопку на странице моего сайта, которая будет заполнять эти значения и отправлять информацию без необходимости копировать / вставлять их и нажимать кнопку отправки.

Дополнительные пояснения: как автоматизированные спам-боты заполняют формы и нажимают кнопку отправки, если они были написаны на C#?

Взгляните на Ватин

SQLMenace 26.08.2008 00:53

@BobKaufman Простой поиск по запросу "Watin" в поисковой системе найдет его, вероятно, быстрее, чем спросить человека, написавшего комментарий 12 лет назад ...

Heretic Monkey 14.05.2020 02:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
34
2
99 094
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Код будет выглядеть примерно так:

WebRequest req = WebRequest.Create("http://mysite/myform.aspx");
string postData = "item1=11111&item2=22222&Item3=33333";

byte[] send = Encoding.Default.GetBytes(postData);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = send.Length;

Stream sout = req.GetRequestStream();
sout.Write(send, 0, send.Length);
sout.Flush();
sout.Close();

WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string returnvalue = sr.ReadToEnd();

Не могли бы вы объяснить, как собрать возвращенные данные из запроса?

Barbaros Alp 28.03.2009 00:39

В приведенном выше примере возвращаемое значение содержит данные, возвращенные из запроса.

Ryan Farley 28.03.2009 05:39

в вашем коде возвращаемое значение - строка. Что, если вы хотите, чтобы ваш пользователь просматривал обычную страницу?

jlp 07.09.2011 15:52

@jlp Вы имеете в виду, что хотите просто показать страницу пользователю, чтобы он мог ее просмотреть? В таком случае вы бы этого не делали, а вместо этого использовали бы элемент управления «Браузер» или оболочку URL-адреса. Возврат является строкой, потому что вы получаете обратно все, что сервер отправляет обратно, а это строка, обычно HTML. Вы можете загрузить этот HTML-код в элемент управления браузера, если действительно захотите.

Ryan Farley 07.09.2011 19:24

Когда я размещаю фактическую форму на другом веб-сайте, запрос проходит и веб-сайт перенаправляет (302) в ответ на следующий URL-адрес. Но при использовании выше он дает Forbidden (403). Что могло быть не так? Как я могу получить 302 в WebResponse?

Himalaya Garg 22.12.2020 17:12

Просмотрите источник страницы и используйте класс WebRequest для публикации. Не надо гонять IE. Просто выясните, что IE отправляет на сервер, и воспроизведите это. Использование такого инструмента, как Fiddler, сделает это еще проще.

Вы можете использовать метод UploadValues ​​в WebClient - все, что для этого требуется, - это передать URL-адрес и NameValueCollection. Это самый простой подход, который я нашел, и в документации MS есть хороший пример:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

Вот простая версия с некоторой обработкой ошибок:

var webClient = new WebClient();
Debug.Info("PostingForm: " + url);
try
{
     byte [] responseArray = webClient.UploadValues(url, nameValueCollection);
     return new Response(responseArray, (int) HttpStatusCode.OK);
}
catch (WebException e)
{
     var response = (HttpWebResponse)e.Response;
     byte[] responseBytes = IOUtil.StreamToBytes(response.GetResponseStream());
     return new Response(responseBytes, (int) response.StatusCode);
}  

Класс Response - это простая оболочка для тела ответа и кода состояния.

У меня была ситуация, когда мне нужно было программно публиковать свободный текст из текстового поля html, и у меня были проблемы, когда я получал <br /> в моем списке параметров, который я создавал.

Мое решение заключалось в замене тегов br на символы перевода строки и htmlencoding на всякий случай.

Regex.Replace( HttpUtility.HtmlDecode( test ), "(<br.*?>)", "\r\n" ,RegexOptions.IgnoreCase);

Где вы кодируете строку:

Encoding.Default.GetBytes(postData);

Вместо этого используйте Ascii для API Google:

Encoding.ASCII.GetBytes(postData);

это делает ваш запрос таким же и эквивалентным запросу "curl --data" ... "[url]"

Вы можете отправить сообщение / получить запрос разными способами. Помочь могут разные типы библиотек. Я обнаружил, что это сбивает с толку, чтобы выбрать, какой из них я должен использовать, и какие среди них различия.

После переполнения стека серфинга это лучший ответ, который я нашел. эта ветка объясняет все

https://stackoverflow.com/a/4015346/1999720

Другие вопросы по теме