Как разместить данные на определенный URL с помощью WebClient в C # - PullRequest
293 голосов
/ 23 марта 2011

Мне нужно использовать «HTTP Post» с WebClient для публикации некоторых данных на определенный URL-адрес, который у меня есть.

Теперь я знаю, что это можно сделать с помощью WebRequest, но по некоторым причинам я хочу использовать вместо него WebClient. Это возможно? Если да, может кто-нибудь показать мне какой-нибудь пример или указать верное направление?

Ответы [ 7 ]

358 голосов
/ 23 марта 2011

Я только что нашел решение, и да, это было проще, чем я думал :)

так вот решение:

string URI = "http://www.myurl.com/post.php";
string myParameters = "param1=value1&param2=value2&param3=value3";

using (WebClient wc = new WebClient())
{
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    string HtmlResult = wc.UploadString(URI, myParameters);
}

работает как шарм:)

341 голосов
/ 25 октября 2012

Существует встроенный метод с именем UploadValues ​​, который может отправлять HTTP-запрос POST (или любой другой метод HTTP) И обрабатывает создание тела запроса (объединяет параметры с "&" и экранирует символы путем кодирования URL ) в правильном формате данных:

using(WebClient client = new WebClient())
{
    var reqparm = new System.Collections.Specialized.NameValueCollection();
    reqparm.Add("param1", "<any> kinds & of = ? strings");
    reqparm.Add("param2", "escaping is already handled");
    byte[] responsebytes = client.UploadValues("http://localhost", "POST", reqparm);
    string responsebody = Encoding.UTF8.GetString(responsebytes);
}
38 голосов
/ 23 марта 2011

Используя WebClient.UploadString или WebClient.UploadData, вы можете легко отправлять данные на сервер. Я покажу пример использования UploadData, поскольку UploadString используется так же, как DownloadString.

byte[] bret = client.UploadData("http://www.website.com/post.php", "POST",
                System.Text.Encoding.ASCII.GetBytes("field1=value1&amp;field2=value2") );

            string sret = System.Text.Encoding.ASCII.GetString(bret);

больше: http://www.daveamenta.com/2008-05/c-webclient-usage/

19 голосов
/ 02 августа 2016
string URI = "site.com/mail.php";
using (WebClient client = new WebClient())
{
    System.Collections.Specialized.NameValueCollection postData = 
        new System.Collections.Specialized.NameValueCollection()
       {
              { "to", emailTo },  
              { "subject", currentSubject },
              { "body", currentBody }
       };
    string pagesource = Encoding.UTF8.GetString(client.UploadValues(URI, postData));
}
18 голосов
/ 21 августа 2012
//Making a POST request using WebClient.
Function()
{    
  WebClient wc = new WebClient();

  var URI = new Uri("http://your_uri_goes_here");

  //If any encoding is needed.
  wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
  //Or any other encoding type.

  //If any key needed

  wc.Headers["KEY"] = "Your_Key_Goes_Here";

  wc.UploadStringCompleted += 
      new UploadStringCompletedEventHandler(wc_UploadStringCompleted);

  wc.UploadStringAsync(URI,"POST","Data_To_Be_sent");    
}

void wc__UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)    
{  
  try            
  {          
     MessageBox.Show(e.Result); 
     //e.result fetches you the response against your POST request.         
  }
  catch(Exception exc)         
  {             
     MessageBox.Show(exc.ToString());            
  }
}
1 голос
/ 14 марта 2019

Использование простого client.UploadString(adress, content); обычно работает нормально, но я думаю, следует помнить, что WebException будет выдано, если не будет возвращен HTTP-код успешного завершенияЯ обычно обрабатываю это так, чтобы напечатать любое сообщение об исключении, которое возвращает удаленный сервер:

try
{
    postResult = client.UploadString(address, content);
}
catch (WebException ex)
{
    String responseFromServer = ex.Message.ToString() + " ";
    if (ex.Response != null)
    {
        using (WebResponse response = ex.Response)
        {
            Stream dataRs = response.GetResponseStream();
            using (StreamReader reader = new StreamReader(dataRs))
            {
                responseFromServer += reader.ReadToEnd();
                _log.Error("Server Response: " + responseFromServer);
            }
        }
    }
    throw;
}
0 голосов
/ 03 мая 2016
string URI = "http://www.myurl.com/post.php";
string myParameters = "param1=value1&param2=value2&param3=value3"

можно упростить до

http://www.myurl.com/post.php?param1=value1&param2=value2&param3=value3.

Это всегда работает. Я нашел, что оригинал работает и выключается.

...