C#で応答を待たずにPOSTを送信する方法は?どうすればいいですか?
助けてください!
WebClient
など、クラスの非同期メソッドの 1 つを使用しますUploadStringAsync
。
投稿が完了する (または失敗する) と、対応するイベント (UploadStringCompleted
例) がトリガーされますが、イベントのハンドラーをフックする必要はありません。ただし、エラーが発生したかどうかを確認するために、それを実行することをお勧めします。
HTTPセッションは単なる標準のTCPセッションであり、POSTはHTTP仕様を満たす適切にフォーマットされたデータです。WebサーバーへのTCP接続を開き、POST要求を送信してから、TCP接続を閉じることができます。HTTP仕様(RFC 2616)をチェックして、POSTを適切にフォーマットする方法を学ぶことができます。あなたはそれを見つけることができます:http ://www.w3.org/Protocols/rfc2616/rfc2616.html
非常に基本的なPOSTは、TCP接続を介して以下を送信します。
POST / HTTP/1.1
Host: www.thehost.com
Content-Length: 3
Content-Type: application/x-www-form-urlencoded
Hi!
コンテンツとそれに対応する長さを送信したいものに置き換え、/を正しいパスに変更し、ホストのホスト名またはIPをHost:...に配置し、TCPセッションをそのホストに接続します。
非常に基本的な例:
using System.Net;
using System.Net.Sockets;
static void Main(string[] args)
{
string Hostname = "www.website.com";
TcpClient Client = new TcpClient(Hostname, 80);
Client.Client.Send(new ASCIIEncoding().GetBytes("POST / HTTP/1.1\nHost: "+Hostname+"\nConnection: close\n\n"));
Client.Close();
}
www.website.comを正しいホスト名(および必要に応じてポート)に変更します。
UploadValuesAsync は、次のようなものを使用して、より完全なソリューションのように見えます。
using (var client = new WebClient())
{
var values = new NameValueCollection();
// add values...
client.UploadValuesAsync(new System.Uri(rawUrl), "POST", values);
}
ただし、少し異なる問題を解決しようとしていたため、このコードをテストしていないことに注意してください。
var wc = 新しい WebClient(); wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; wc.UploadStringAsync(uri, データ); wc.UploadStringCompleted += (送信者, e) => { // 完了 };