-1

これは私を夢中にさせており、どこにボールを落としているのかわかりません。googlemonsta を介して見つかったいくつかの例を参考にしましたが、役に立ちませんでした。私が間抜けになった場所へのポインタは、非常に高く評価されます。

        var writer = new StringWriter();
        param = "location=" + Server.UrlEncode(param);
        byte[] paramStream = Encoding.ASCII.GetBytes(param + "&param2=value");
        var URL = "http://www.somesite.com";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2";
        request.ContentLength = paramStream.Length;
        using( var stream = request.GetRequestStream())
        {
            stream.Write(paramStream, 0, paramStream.Length);
        }

        var response = request.GetResponse();

        string result;
        using (var sr = new StreamReader(response.GetResponseStream()))
        {
            result = sr.ReadToEnd();
        }

ありがとう!

編集:私が知る限り、サイトにヒットしているとわかりますが(私はhtmlを取り戻しています)、パラメータはプッシュされていません。基本的に、成功した場合に値が表示される場所を取得しています。最初の & を削除しようとしましたが、どこにも行きませんでした。

編集:変更を反映するようにコードを編集しました。

4

3 に答える 3

3

おそらく最初のパラメータの先頭から&を削除しますか?それ以外は基本的には大丈夫そうです。(実際のコードのパラメーター名を確認してください。サンプルに「パラメーター」が含まれている場合は、ほぼ確実に「パラメーター」である必要がありますが、実際のコードがどのように見えるか、または実際のサイトが何を期待しているかはわかりません。)

実際に何が起こっているのかについてもっと情報を教えてください。それが機能しないことはわかっていますが、考えられるさまざまな障害モードがたくさんあります:)

コンテンツの長さを指定していないという、もう1つの考えがあります。これがによって自動的に入力されるかどうかはわかりませんWebRequestWireSharkを使用して、アウトバウンド要求に存在するかどうかを確認することは価値があります。

一般的な慣例として、を破棄する必要があります。応答ストリームのステートメントがすでにある場合はWebResponse、呼び出す必要はありません。Closeusing

string result;
using (WebResponse response = request.GetResponse())
{
    using (var sr = new StreamReader(response.GetResponseStream()))
    {
        result = sr.ReadToEnd();
    }
}
于 2009-03-30T16:48:08.443 に答える
1

投稿に必要な値がすべて揃っていますか? フォームに次のような非表示の入力フィールドがある場合がありました。

<input name="action" type="hidden" id="action" value="login">

そして、それを次のようにパラメーターとして指定する必要がありました。

&action=login

フォームから何も見逃していないことを確認してください...

編集:もう1つ:これを行ったコードをもう一度見て、そこにも次の行があることに気付きました:

request.ContentLength = bytes.Length;

それが必要かどうかはわかりませんが、長さを設定していないことに気付きました。

于 2009-03-30T17:09:34.757 に答える
0

パラメータの後のキャリッジリターン/改行のような単純なものではありませんか? インターネット上の HTTP に関するいくつかのドキュメントを見ると、後で空白行が必要になるようです。

(Web サーバーに手動で telnet 接続し、リクエストを貼り付けることをお勧めします。)

于 2009-03-30T18:04:01.367 に答える