WebClientで "HTTP Post"を使用して、自分が持っている特定のURLにデータを投稿する必要があります。
今、私はこれがWebRequestで達成できることを知っていますが、いくつかの理由で私は代わりにWebClientを使いたいです。それは可能ですか?もしそうなら、誰かが私にいくつかの例を見せることができるか、または私に正しい方向を向けることができますか?
私はちょうどその解決策を見つけました、そして、それは私が思ったより簡単でした:)
だからここに解決策があります:
string URI = "http://www.myurl.com/post.php";
string myParameters = "param1=value1¶m2=value2¶m3=value3";
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = wc.UploadString(URI, myParameters);
}
それは魅力のように動作します:)
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);
}
WebClient.UploadString
またはWebClient.UploadData
を使用すると、サーバーに簡単にデータをPOSTできます。 UploadStringはDownloadStringと同じ方法で使用されるため、UploadDataを使用した例を示します。
byte[] bret = client.UploadData("http://www.website.com/post.php", "POST",
System.Text.Encoding.ASCII.GetBytes("field1=value1&field2=value2") );
string sret = System.Text.Encoding.ASCII.GetString(bret);
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));
}
//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());
}
}
単純なclient.UploadString(adress, content);
の使用は通常はうまくいきますが、HTTP成功ステータスコードが返されない場合はWebException
がスローされることを忘れないでください。私は通常、リモートサーバーから返される例外メッセージを表示するためにこのように扱います。
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;
}