Подтвердить что ты не робот

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

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

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

Дальнейшие разъяснения. Как автоматические спам-боты заполняют формы и нажимают кнопку отправки, если они были написаны на С#?

4b9b3361

Ответ 1

Вы можете увидеть пример этого здесь: http://en.csharp-online.net/HTTP_Post

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

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();

Ответ 2

Вы можете использовать метод 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 является простой оболочкой для тела ответа и кода состояния.

Ответ 3

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

Ответ 4

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

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

fooobar.com/questions/13607/...

Ответ 5

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

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

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

Ответ 6

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

Encoding.Default.GetBytes(PostData);

Используйте Ascii вместо google apis:

Encoding.ASCII.GetBytes(PostData);

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