0

C#で応答を待たずにPOSTを送信する方法は?どうすればいいですか?

助けてください!

4

4 に答える 4

3

WebClientなど、クラスの非同期メソッドの 1 つを使用しますUploadStringAsync

投稿が完了する (または失敗する) と、対応するイベント (UploadStringCompleted例) がトリガーされますが、イベントのハンドラーをフックする必要はありません。ただし、エラーが発生したかどうかを確認するために、それを実行することをお勧めします。

于 2012-04-18T09:34:48.283 に答える
2

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を正しいホスト名(および必要に応じてポート)に変更します。

于 2012-04-18T09:32:54.223 に答える
1

UploadValuesAsync は、次のようなものを使用して、より完全なソリューションのように見えます。

using (var client = new WebClient())
{
    var values = new NameValueCollection();
    // add values...
    client.UploadValuesAsync(new System.Uri(rawUrl), "POST", values);
}

ただし、少し異なる問題を解決しようとしていたため、このコードをテストしていないことに注意してください。

于 2015-03-17T12:50:00.460 に答える
0
var wc = 新しい WebClient();
wc.Headers["Content-type"] = "application/x-www-form-urlencoded";
wc.UploadStringAsync(uri, データ);
wc.UploadStringCompleted += (送信者, e) =>
{
    // 完了
};
于 2012-04-18T09:38:07.390 に答える