2016-07-15 5 views
0

私が成功したウェブサイトにログインし、クエリを実行し、このスクリプトを持っている:私が何をしようとしています何このPowerShell Web要求をセッションを適切に保存するにはどうすればよいですか?

$credential = Get-Credential 

$postParams = @{username=$credential.UserName;password=$credential.GetNetworkCredential().password} 

Invoke-WebRequest -Uri http://www.nexusmods.com/newvegas/sessions/?Login -Method POST -Body $postParams -SessionVariable cookie 

$query = Invoke-WebRequest -Uri http://www.nexusmods.com/newvegas/mods/searchresults/? -WebSession $cookie 

は別のウェブサイト、Trelloで同様のことを行うです。これはスクリプトです:ユーザーがログインしていなかったかのように

$credential = Get-Credential 

$postParams = @{method='password';'factors[user]'=$credential.UserName;'factors[password]'=$credential.GetNetworkCredential().password} 

Invoke-WebRequest -Uri https://trello.com/1/authentication -Method POST -Body $postParams -SessionVariable cookie 

$result = Invoke-WebRequest -uri https://trello.com/ -WebSession $cookie 

はしかし、ページ変数の表示を引き起こすので、私はセッションが正常に保存されていないと仮定しています。これをどうすれば解決できますか?

+0

Trelloで何をしたいですか?彼らは自分のウェブページからログインしようとするよりもはるかに使いやすいAPIを持っています。あなたがしたいことを私に知らせるなら、私は助けることができます。 – FoxDeploy

+0

私はAPIを使用するPowerShellスクリプトを書いていますが、自分のキーやトークンをハードコードしたくないし、スクリプトを使用している人にそのようなことを覚えてもらいたいとは思っていません。 私の目標はウェブサイトにログインしてアカウントのAPIキーを取得してトークンを生成するためにウェブリクエストを使用することです。これにより、APIを使用するスクリプトにはCLIからのクレデンシャルが与えられるだけです。 –

+0

私はAPIを使ってこれをネイティブに行うアプローチを書いていますが、これが役立つかどうか教えてください。 – FoxDeploy

答えて

3

あなたがウェブ上でリモートサービスで作業したい場合は、これを行う最も簡単な方法は、彼らのAPIを使用することです。それでは、そのルートに行く方法があります。

ここAPIについては、ステップ1のサインアップ:https://trello.com/app-key

は、以下のコードでは、あなたの$trelloKeyとして、このキーを押しコピーします。

ステップ2 Trelloで動作するようにカスタマイズされたShow-OAuthWindow functionをダウンロードします。

$trellokey ='redacted' 

$r = Show-OAuthWindow "https://trello.com/1/authorize?expiration=never&scope=read,write,account&response_type=token&name=Server%20Token&key=$trellokey" 

$me = invoke-restmethod "https://api.trello.com/1/members/me/boards?key=$trellokey&token=$global:code" 

このコードを実行すると、ログインウィンドウが表示されます。サインインしてフォームを閉じます。

enter image description here

ログインして、我々は我々のコードの後半で使用する必要がある、このトークンを承認します。これが完了すると、あなたは

>we retrieved a code, check within $code for the value 

コンソールでこれを見ることができます。この機能は、あなたが任意の情報を要求したときに提供する必要が許可トークンが含まれている$global:codeのグローバル変数を返し

Your token might be longer, this token here was VERY short because of limited perms

。たとえば、ユーザーアカウントに関する情報を表示するには、/members/meエンドポイントを使用して、最終行にユーザーアカウントに関する情報を格納します。ここでは、この要求が行われている方法は次のとおりです。

$endpoint = "https://api.trello.com/1/members/me/boards" 
$auth = "?key=$trellokey&token=$global:code" 
$request = $endpoint + $auth 
Invoke-RESTMethod $request 

enter image description here

あなたは今、あなたはTrelloでみたいものは何でもやってany of the API endpoints listed in their catalogを使用することができます。エンドポイントを必要な情報のURLに置き換えるだけで、離れて行くことができます。

これはウェブリソースとやりとりするための、サポートされている標準的な方法であり、あなたの努力はうまくいっています。

これをWebページの自動化で使用すると、Trelloの慈悲に服します。彼らがページを変更した場合は、すべてのコードを書き直す必要があります。

0

サイトでのログインの処理方法によっては、Invoke-RestMethodを使用する必要があります。ここでは、PowerShellを経由して、このサイトにログインする方法の例です:

$u="username" 
$p="password" 

#1. Get page: 
$page = Invoke-WebRequest "https://stackoverflow.com/users/login" -SessionVariable so 

#2. Fill in login form: 
$form = $page.Forms["login-form"] 
$form.Fields["email"] = $u 
$form.Fields["password"] = $p 

#3. Submit login form: 
$page = Invoke-RestMethod "https://stackoverflow.com/users/login" -Body $form -Method $form.Method -WebSession $so 

#4. Do something else... 
+0

ウェブサイトのフォームで、「ログイン」を押すと、Invoke-WebRequestで送信した3つのパラメータを持つHTTP投稿が送信されます。 私の現在のバージョンの前には説明したとおりにしましたが、POSTフォームを使用するログインページにもかかわらず、常に「POST /ログインできません」というエラーが表示されます。 –

関連する問題