コマンドラインを使用して Http(s) GET および POST リクエストを実装し、Web サイトに自動的にログインする Powershell スクリプトの簡単な例

Web サイトに自動的にログインするプロセスは比較的単純ですが、Python、JavaScript、C++ などのプログラミング言語を知らず、これらのプログラミング言語環境ソフトウェアをインストールしていない場合は、新しいアイデアが必要です。 Windows システムに付属の Powershell を使用して自己コンパイル スクリプトを実行し、.

PowerShell は強力な自動化ツールで、DOS バッチ コマンドの使用に加えて、計算、Web クローラー、および Web ページ データのクロールも実行できます。この記事では、PowerShell を使用してフォーラムにログインする方法について説明します。

Powershell の利点:

1. Windows が付属しているため、プログラミング言語環境をインストールする必要がなく、任意のテキスト エディター (「メモ帳」など) でスクリプトを編集できます。

2. 独自の機能により、ネットワーク プログラミングは追加のライブラリ ファイルやヘッダー ファイルをインストールする必要がありません。

3. DOS の .bat バッチ処理と同じように、インタープリター プログラミングです. .exe にコンパイルする必要はなく、コードを 1 行ずつ入力して段階的に実行できます。

ステップ 1: ログイン ページの URL と、リクエストの作成に使用されるセッション オブジェクト (Session) を初期化します。

$login_url = 'http://登录网址'
$username = '登录账号'
$password = '登录密码'
# 创建一个Session,会自动记录Cookies便于后续的网络访问
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession

ステップ 2: Invoke-WebRequest コマンドは、GET 要求を送信してログイン Web ページを開きます。-SessionVariable パラメーターを使用して、後で使用するためにセッション オブジェクトを保存できます。

Web ページのソース コードは $response1.Content 変数に格納され、フォーラム ログイン ページのソース コードのハッシュ値などの正規表現を使用して、ログインに必要なフォーム データがこの変数から抽出されます。

$response1 = Invoke-WebRequest -Uri $login_url -SessionVariable session

# 发出GET请求后获得的网页源代码保存在$response1.Content变量中
# 正则表达式提取网页源代码 name="hash" value="…………" 中“…………”的内容

if ($response1.Content -match 'name="hash" value="(.*?)"') {
    $hash = $Matches[1]
}

$Matches 変数は、正規表現フェッチの結果を保持する特別な PowerShell 変数です。

ステップ 3: ログイン フォームの送信で送信されるデータを準備します。上記で抽出したハッシュ、ユーザー名、パスワードなど、必要なフィールドを含むデータ テーブルを作成します。

次に、Invoke-WebRequest コマンドを使用して、データ (-Body $data) とセッション オブジェクトを渡します。-WebSession $session パラメーターを使用して、セッションの接続を維持する必要があります (上記のネットワーク アクセス後に生成された Cookie を引き続き使用します)。

$data = @{
    hash = $hash
    username = $username
    password = $password
}

# "POST"发送表单数据来登录网站
$response2 = Invoke-WebRequest -Uri $login_url -Method POST -Body $data  -WebSession $session

ステップ 4: POST 要求を送信した後、サーバーから返される情報は次のようになります。

{"status":1,"msg":"\u767b\u5f55\u6210\u529f","re​​direct":{"timeout":2,"subject":"\u9996\u9875","href":"\ /"}}

明らかにこれは JSON オブジェクトであり、その中の "msg" は、理解する必要があるログイン結果テキストです. テキストは Unicode にエンコードされているため、人々が理解できるテキストに変換するには、ConvertFrom-Json を使用する必要がありますオブジェクトを解析して出力するコマンドレット 正しいテキスト メッセージです。

# 将服务器返回的网页源代码文本转换为JSOn格式
$json1 = $response2.Content
$obj = $json1 | ConvertFrom-Json

# 从JSON中提取 "msg" 的文本并输出
$msg1 = $obj.msg
Write-Output $msg1

PowerShell は解釈された実行コードであるため、上記のコードを直接貼り付けて、PowerShell プロンプトで実行できます。上記のコードを DOS .bat バッチ ファイルのような Powershell スクリプト形式で保存することもできます。拡張子は .ps1、ファイル名は my login test.ps1 のように任意で、D:\Documents に保存します。次に、スタート メニューで Powershell を開くことを選択します。操作手順は次のとおりです。

cd "d:\documents"
.\"my login test.ps1"

スペースによるエラーを防ぐために、ファイル名とディレクトリ名に二重引用符を追加します。スクリプトを実行するコマンドでは、ファイル名の前に.\ を付ける必要があります

 

注: .ps1 スクリプト ファイルを初めて実行する場合、PowerShell で次のエラー メッセージが表示される可能性があります。

无法加载文件 D:\documents\my login test.ps1,因为在此系统上禁止运行脚本。
有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 
中的 about_Execution_Policies。
所在位置 行:1 字符: 3
+   .\"my login test.ps1"
+   ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

その理由は、PowerShell が最初に開始されたときに、アクティブな実行ポリシーが制限されている (スクリプトの実行が許可されていない) 可能性が高いためです。スクリプトを実行するには、PowerShell で次のコマンドを入力します。

set-ExecutionPolicy RemoteSigned

 次に、プロンプトに従って A (永続的) または Y (一時的) を入力し、スクリプトの実行を続行します。

おすすめ

転載: blog.csdn.net/Scott0902/article/details/129820183