Как вы программно заполняете форму и "POST" на веб-странице?
Используя С# и ASP.NET, я хочу программно заполнить некоторые значения (4 текстовых поля) на веб-странице (форме), а затем "POST" эти значения. Как это сделать?
Изменить: Уточнение: существует служба (www.stopforumspam.com), где вы можете отправить ip, имя пользователя и адрес электронной почты на странице "добавить". Я хочу иметь возможность создать ссылку/кнопку на моей странице сайта, которая заполнит эти значения и отправит информацию без необходимости их скопировать/вставить и нажать кнопку отправки.
Дальнейшие разъяснения. Как автоматические спам-боты заполняют формы и нажимают кнопку отправки, если они были написаны на С#?
Ответы
Ответ 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