ここで重要なことは、ブラウザの POST イベントをシミュレートしていることです。テキスト ボックスやその他のビジュアル フォーム要素について心配する必要はありません。目的は、適切なキーと値のペアを使用して HTTP POST 要求を生成することです。
最初のステップは、なりすましのページの HTML を調べて、ユーザー ID とパスワードのフォーム要素の名前を見つけることです。したがって、たとえば、それぞれ「txtUsername」と「txtPassword」と呼ばれるとしましょう。その場合、ブラウザー (またはユーザー エージェント) が POST 要求で送信するポスト引数は次のようになります。
txtUsername=fflintstone&txtPassword=ilikerocks
この背景として、HTTP がどのように機能するかについて少し調べてみることをお勧めします。しかし、私はそれをあなたに任せます。
もう 1 つの重要な点は、このログイン要求を送信する URL を特定することです。通常、これはログイン時にブラウザのアドレス バーに表示されるものですが、それ以外の場合もあります。form 要素の action 属性をチェックする必要があるので、どこに行くかを確認してください。
Fiddler2 のコピーをダウンロードすると役立つ場合があります。はい、奇妙な名前ですが、基本的にプロキシとして機能し、ブラウザーとリモート ホストの間で行われるすべてをキャプチャする優れた Web デバッグ ツールです。使用方法を理解したら、各リクエストとレスポンスを分離して、何が起こっているかを確認できます。呼び出された URL、リクエストのタイプ (通常は GET または POST)、リクエスト引数、およびレスポンスの全文が表示されます。
次に、アプリをビルドします。正しい HTTP リクエストを作成し、フォーム引数を渡し、結果を返すロジックを構築する必要があります。幸いなことに、System.Net.HttpWebRequest クラスがまさにそれを行うのに役立ちます。
ログイン ページが www.hello.org/login.aspx にあり、ログイン引数を POST する必要があるとします。したがって、コードは次のようになります (明らかに、これは非常に単純化されています)。
Imports System.IO
Imports System.Net
Imports System.Web
Dim uri As String = "http://www.hello.org/login.aspx"
Dim request As HttpWebRequest = DirectCast(WebRequest.Create(uri), HttpWebRequest)
request.Timeout = 10000 ' 10 seconds
request.UserAgent = "FlintstoneFetcher/1.0" ' or whatever
request.Accept = "text/*"
request.Headers.Add("Accept-Language", "en")
request.Method = "POST"
Dim data As Byte() = New ASCIIEncoding().GetBytes("txtUsername=fflintstone&txtPassword=ilikerocks")
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = data.Length
Dim postStream As Stream = request.GetRequestStream()
postStream.Write(data, 0, data.Length)
postStream.Close()
Dim webResponse As HttpWebResponse
webResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim streamReader As StreamReader = New StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding(1252))
Dim response As String = streamReader.ReadToEnd()
streamReader.Close()
webResponse.Close()
応答文字列には、リモート ホストからの完全な応答テキストが含まれるようになり、そのホストはログインしたと見なす必要があります。リモート ホストが Cookie を設定しようとしている場合は、少し追加の作業が必要になる場合があります (これらの Cookie を返す必要があります)。 )。または、連続するページで統合認証を渡す必要がある場合は、次のような認証情報を連続するリクエストに追加する必要があります。
request.Credentials = New NetworkCredential(theUsername, thePassword)
それはクラッキングを取得するのに十分な情報です。HTTP を操作するためのロジックを独自のクラスにモジュール化することをお勧めします。特定のWebサイトにログインし、事前に決定されたページに移動し、htmlを解析し、「invox」でダウンロードする毎日のファイルを探し、存在する場合はダウンロードする複雑なソリューションを実装しました。これを毎朝実行するバッチ プロセスとして設定し、手動でこれを行う必要がある人を省きました。うまくいけば、私の経験があなたの役に立ちます!