7

私はシステム担当者で、現在パートタイムの Web 開発プロジェクトを行っているため、まったくの初心者です。www.portapower.com の http クライアントを作成しようとしています。

ウェブサイトに投稿された特定のアイテムが対象となり、特定の要件に一致する場合はメッセージが出力されます。

このページにアクセスしようとすると:

http://www.portapower.com/getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==

Web サイトからデフォルトの登録ページにリダイレクトされます。

http://www.portapower.com/defaregit.php

ここに私がコーディングしたもののスニペットがあります:

CookieContainer myContainer = new CookieContainer();

HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.portapower.com/" + urlpart);
request.Credentials = new NetworkCredential("****", "******");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();

Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());

ユーザー名とパスワードはありますが、ブラウザから使用すると正常に動作します。これが認証済みページにアクセスする正しい方法かどうか教えてください。

4

4 に答える 4

7

Web サイトがユーザーを認証する方法によって異なります。基本認証または Windows 認証を使用している場合は、クラスのCredentialsプロパティをユーザー名/パスワード/ドメイン情報に設定すると、機能するはずです。HttpWebRequest

ただし、サイトでユーザー名/パスワードを入力する必要があるようです。つまり、最初にサイトにログインする必要があります。メインページを見ると、<form>ログインを処理する要素に次のようなものがあります。

<form name="formlogin" method="post" action="./defalogin.php" >
  <input name="emtext" type="text" id="emtext" size="12">
  <input name="pstext" type="password" id="pstext" size="12">
  <input type="submit" name="Submit" value="Logn in" 
    onClick="return logincheck()" >
</form>

関連する部分のみを含めました。

これを考えると、./defalogin.php最初に でページに移動し、との値HttpWebRequestを POST する必要があります。また、プロパティを のインスタンスに設定していることを確認してください。POST への呼び出しが返されると、サイトに送り返す必要がある Cookie が取り込まれる可能性が高くなります。後続のインスタンスでプロパティを設定し続けて、Cookie が確実に渡されるようにします。emtextpstextCookieContainerCookieContainerCookieContainerHttpWebRequestCookieContainer

次に、リンクに示されているページに移動します。

気になるのはlogincheckjavascript関数ですが、スクリプトソースを見ると特筆すべきことはありません。

于 2009-03-12T19:30:11.750 に答える
2

渡す資格情報は、Windows 認証用です。フォームの送信を模倣するデータを使用して投稿データを送信する必要があります。次に、応答に設定されたセッション Cookie を captrue にし、その Cookie を将来の要求に使用します。

これを行うためのコードがあるこの回答を見てください:

HttpWebRequest でページにログインする

于 2009-03-12T19:50:37.630 に答える
1

このようにすることはできません。渡すクレデンシャルは、基本的な認証スキームで使用できます (つまり、ブラウザで、ユーザー名/パスワード ダイアログがポップアップ表示されます)。そのフォームへのデータの入力をシミュレートし、そのフォームをキャッチする必要があります。ログイン Cookie を使用します。

于 2009-03-12T19:29:21.767 に答える
0

NetworkCredential クラスは、通常の Windows 資格情報 (NTLM、Kerberos など) を制御するためのものです。

そのサイトは Apache 上で動作する PHP サイトなので、NTLM や kerberos を使用しているとは思えません。

あなたがしたいことは、いくつかの FORM フィールドをサイトに投稿し、返された Cookie を保持することです。後続のリクエストで Cookie をサイトにプッシュして、すでにログインしていることを確認してください。

于 2009-03-12T19:27:24.657 に答える