9

このコードは機能しません。https プロトコルを使用している Web サイトにログインしています。この問題を解決するには?コードはGetRequestStream()、プロトコル違反の例外が処理されていないと言って、いつでもどこでも停止します..

string username = "user";
string password = "pass";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://moje.azet.sk/prihlasenie.phtml?KDE=www.azet.sk%2Findex.phtml%3F");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)";

Console.WriteLine(request.GetRequestStream());

using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
    writer.Write("nick=" + username + "&password=" + password);
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Retrieve your cookie that id's your session
//response.Cookies

using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    Console.WriteLine(reader.ReadToEnd());
}
4

4 に答える 4

5

GetRequestStream を呼び出す前に、リクエスト メソッドを post に設定します。

お気に入り

request.Method = "POST";

using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
    writer.Write("nick=" + username + "&password=" + password);
}
于 2009-02-12T16:18:23.230 に答える
3

私の推測では、あなたが経験している問題は、(他の人がアドバイスしたように) POST リクエストではなく GET リクエストを実行しているという事実によるものです。さらに、そのページのパスワード フィールドの実際の名前は「password」ではなく「heslo」であることに気付きました。このタイプミスが原因で Web サーバーが応答を返さなくなることはありませんが、サーバーは特定の変数名がパスワード値と共にポストされるのを探しているため、他の問題が発生します。

于 2009-02-12T16:33:05.533 に答える
1

また、投稿する内容の合計の長さを事前に把握し、それをリクエストの ContentLength として設定することもできます。MSDNを参照してください:

HttpWebRequest クラスに設定されたプロパティが競合している場合、いくつかのケースで ProtocolViolationException がスローされます。この例外は、アプリケーションが ContentLength プロパティと SendChunked プロパティを true に設定し、HTTP GET 要求を送信した場合に発生します。この例外は、アプリケーションが HTTP 1.0 プロトコルのみをサポートするサーバーにチャンクを送信しようとした場合に発生しますが、これはサポートされていません。この例外は、アプリケーションが ContentLength プロパティを設定せずにデータを送信しようとした場合、またはバッファリングが無効でキープアライブ接続 (KeepAlive プロパティが true) のときに SendChunked が false である場合に発生します。

于 2009-02-12T16:22:20.223 に答える
0

これが私にとってうまくいくものです:

    var request = WebRequest.Create(_url);
    request.PreAuthenticate = true;
    request.Credentials = new NetworkCredential(_userName, _password);
于 2012-01-05T04:57:55.073 に答える