Как заполнить формы и отправить с помощью Webclient в C #

Я новичок в использовании библиотек WebClient, HttpResponse и HttpRequest на C #, так что несите меня, если мой вопрос путает читать.

Мне нужно создать WinForm на основе C #, который может открыть URL-адрес, который защищен базовой авторизацией. Я сделал это, добавив это в заголовок, например:

using (WebClient wc = new WebClient()) { wc.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String( Encoding.ASCII.GetBytes(username + ":" + password))); } 

Все идет нормально! Теперь я хотел бы заполнить форму числом, и я нахожу исходный код с сайта и обнаруживаю, что это имя «число». Поэтому я пишу это:

 NameValueCollection formData = new NameValueCollection(); formData["number"] = number byte[] responseBytes = wc.UploadValues(theurl, "POST", formData); string response = Encoding.ASCII.GetString(responseBytes); textBox_HTML.Text = response; 

Но как я могу это представить? Я хотел бы получить мои «результаты поиска» …

Вероятно, вы должны использовать HttpWebRequest для этого. Вот простой пример:

 var strId = UserId_TextBox.Text; var strName = Name_TextBox.Text; var encoding=new ASCIIEncoding(); var postData="userid="+strId; postData += ("&username="+strName); byte[] data = encoding.GetBytes(postData); var myRequest = (HttpWebRequest)WebRequest.Create("http://localhost/MyIdentity/Default.aspx"); myRequest.Method = "POST"; myRequest.ContentType="application/x-www-form-urlencoded"; myRequest.ContentLength = data.Length; var newStream=myRequest.GetRequestStream(); newStream.Write(data,0,data.Length); newStream.Close(); var response = myRequest.GetResponse(); var responseStream = response.GetResponseStream(); var responseReader = new StreamReader(responseStream); var result = responseReader.ReadToEnd(); responseReader.Close(); response.Close(); 

Попробуй это:

 using System.Net; using System.Collections.Specialized; NameValueCollection values = new NameValueCollection(); values.Add("TextBox1", "value1"); values.Add("TextBox2", "value2"); values.Add("TextBox3", "value3"); string Url = urlvalue.ToLower(); using (WebClient client = new WebClient()) { client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); byte[] result = client.UploadValues(Url, "POST", values); string ResultAuthTicket = Encoding.UTF8.GetString(result); } 

Я нашел решение моей проблемы. Прежде всего, я был смущен некоторыми из основ http-общения. Это было вызвано написанным python-скриптом, которые имеют другой подход к сообщению.

Я решил это, создав POST-данные с нуля и откройте uri, который содержался в форме-действии.

Публикация формы с помощью System.Net.Http.HttpClient и чтение ответа в виде строки:

 var formData = new Dictionary(); formData.Add("number", number); var content = new FormUrlEncodedContent(formData); using (var httpClient = new HttpClient()) { var httpResponse = await httpClient.PostAsync(theurl, content); var responseString = await httpResponse.Content.ReadAsStringAsync(); } 

Вы отправили его уже с UploadValues . Вопрос в том, каков ваш «результат-поиск»? Что возвращает страница? HTML? Если это так – HTML Agility Pack – это самый простой способ разобрать html.

Ответ BFree отлично работает. Тем не менее, я хотел бы отметить, что конкатенация данных действительно должна быть закодирована по URL-адресу, иначе у вас возникнут проблемы с такими вещами, как знаки «=» и «&» в данных.

Версия VB.NET, urlencoded и с поддержкой UTF-8, ниже (обратите внимание, что для кодирования url требуется ссылка на System.Web.dll, которая работала только для меня после того, как я переключился с .NET 4 Compact Framework на обычный. NET 4 Framework).

 Imports System.Web Imports System.Net Imports System.IO Public Class WebFormSubmitter Public Shared Function submit(ByVal address As String, ByVal values As Dictionary(Of String, String)) As String Dim encoding As New UTF8Encoding Dim postData As String = getPostData(values:=values) Dim data() As Byte = encoding.GetBytes(postData) Dim request = CType(WebRequest.Create(address), HttpWebRequest) request.Method = "POST" request.ContentType = "application/x-www-form-urlencoded" request.ContentLength = data.Length Dim newStream = request.GetRequestStream() newStream.Write(data, 0, data.Length) newStream.Close() Dim response = request.GetResponse() Dim responseStream = response.GetResponseStream() Dim responseReader = New StreamReader(responseStream) Return responseReader.ReadToEnd() End Function Private Shared Function getPostData(ByVal values As Dictionary(Of String, String)) As String Dim postDataPairList As New List(Of String) For Each anEntry In values postDataPairList.Add(anEntry.Key & "=" & HttpUtility.UrlEncode(anEntry.Value)) Next Return String.Join(separator:="&", values:=postDataPairList) End Function End Class 
  • Символы в строке изменились после загрузки HTML из Интернета
  • ASP.NET-controller: asynchronous модуль или обработчик завершен, пока асинхронная операция все еще находится на рассмотрении
  • Печально известная, но без ответа проблема загрузки файла, когда требуется защита Windows
  • Автоматически распаковывать ответ gzip через WebClient.DownloadData
  • Войдите на сайт, через C #
  • C # webclient и прокси-сервер
  • Выбор между HttpClient и WebClient
  • Как получить строку json из url?
  • Загрузка файлов на файловый сервер с использованием classа webclient
  • Как отправить данные на определенный URL-адрес с помощью WebClient в C #
  • POSTing JSON для URL через WebClient в C #
  • Interesting Posts

    Маршрутизатор / шлюз на базе ПК, который поддерживает законный перехват?

    Угловые 2 кэша наблюдаемых данных результата http

    Apache Commons Codec с Android: не удалось найти метод

    Самый простой способ иметь файл конфигурации в приложении Windows Forms C #

    Как сделать несколько фотографий, прежде чем отклонить намерение камеры?

    Как перенести файл из одного места в другое на Java?

    Как я могу использовать хранимую процедуру в базе данных MySql с Zend Framework?

    Django TemplateDoesNotExist?

    Пользовательский Drawable для ProgressBar / ProgressDialog

    Windows 8: добавьте немецкие умлауты в раскладку клавиатуры США (возможно, используя AutoHotKey)

    Индикатор выполнения командной строки в Java

    Как извлечь текст из документов MS Office в C #

    Как поместить программу в системный трей?

    NSDictionary с упорядоченными ключами

    Должен ли я использовать общедоступные свойства и частные поля или публичные поля для данных?

    Давайте будем гением компьютера.