2008-08-25 3 views
30

C#とASP.NETを使用して、Webページ(フォーム)にいくつかの値(4つのテキストボックス)をプログラムで入力し、それらの値を「POST」したいと考えています。これはどうすればいいですか?プログラムでフォームを記入し、ウェブページを「POST」するにはどうすればよいですか?

編集:明確化:「追加」ページでIP、ユーザー名、電子メールアドレスを送信できるサービス(www.stopforumspam.com)があります。私はそれらの値を記入し、それらをコピー/ペーストすることなく情報を提出し、提出ボタンをクリックすることなく、私のサイトのページにリンク/ボタンを作成することができるようにしたい。

さらに詳しい解説:C#で書かれた自動化されたスパムボットはフォームに記入して送信ボタンをクリックするとどうなりますか?

+0

を説明 – SQLMenace

答えて

43

あなたがここにいるのサンプルを見ることができます:http://en.csharp-online.net/HTTP_Post

基本的には、コードは次のようになります。

WebRequest req = WebRequest.Create("http://mysite/myform.aspx"); 
string postData = "item1=11111&item2=22222&Item3=33333"; 

byte[] send = Encoding.Default.GetBytes(postData); 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 
req.ContentLength = send.Length; 

Stream sout = req.GetRequestStream(); 
sout.Write(send, 0, send.Length); 
sout.Flush(); 
sout.Close(); 

WebResponse res = req.GetResponse(); 
StreamReader sr = new StreamReader(res.GetResponseStream()); 
string returnvalue = sr.ReadToEnd(); 
+1

がPOSTDATAをURLエンコードする必要はないでしょう[Watin](http://watin.sourceforge.net/)を見てみましょうか? –

+0

リクエストから返されたデータを収集する方法を教えてください。 –

+3

上記のサンプルでは、​​戻り値には要求から返されたデータが含まれています。あなたのコードの戻り値は –

1

は、ページのソースを表示し、投稿を行うためにWebRequestクラスを使用します。 IEを動かす必要はありません。 IEがサーバーに送信しているものを把握し、それを複製してください。フィドラーのようなツールを使うとさらに簡単になります。

4

WebClientでUploadValuesメソッドを使用できます。必要なのは、URLとNameValueCollectionを渡すことだけです。それは私が見つけた最も簡単な方法で、かつMSのドキュメントでは、素敵な例があります。ここでは
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

は、いくつかのエラー処理と簡易版である:

var webClient = new WebClient(); 
Debug.Info("PostingForm: " + url); 
try 
{ 
    byte [] responseArray = webClient.UploadValues(url, nameValueCollection); 
    return new Response(responseArray, (int) HttpStatusCode.OK); 
} 
catch (WebException e) 
{ 
    var response = (HttpWebResponse)e.Response; 
    byte[] responseBytes = IOUtil.StreamToBytes(response.GetResponseStream()); 
    return new Response(responseBytes, (int) response.StatusCode); 
} 

レスポンスクラスは単純なラッパーでありますレスポンスボディとステータスコードの場合

0

私は、プログラムでHTMLテキストエリアからフリーテキストをポストする必要があり、どこに問題があったのですか。私が構築していたparamリストに<br />があります。

解決方法は、安全のために改行文字とhtmlencodingでbrタグを置き換えたものです。あなたは、文字列エンコード

Regex.Replace(HttpUtility.HtmlDecode(test), "(<br.*?>)", "\r\n" ,RegexOptions.IgnoreCase); 
0

Encoding.Default.GetBytes(POSTDATAを)。代わりに、GoogleのAPIの

使用アスキー:

Encoding.ASCII.GetBytes(POSTDATA)。

これはあなたの要求と同じと同等の「--dataカール」...「[URL]」あなたは多くの方法で要求を取得/ポストを送信することができます

1

要求を行います。さまざまなタイプのライブラリがあります。 私はどちらを使うべきかを選択することが混乱しており、の違いはです。

スタックオーバーフローをサーフィンした後で、これはのベストアンサーが見つかりましたです。このスレッドは、すべての

https://stackoverflow.com/a/4015346/1999720

関連する問題