web-dev-qa-db-ja.com

別のページからのログインが必要なページにアクセスするためのCURL

xyz.com/axyz.com/bの2つのページがあります。最初にxyz.com/bにログインした場合にのみ、xyz.com/aにアクセスできます。他を経由せずにxyz.com/bにアクセスする場合、ブラウザを介してアクセスが拒否されます(ログインへのリダイレクトは行われません)。 xyz.com/aでログインすると、もう一方にアクセスできます。

私の問題は、curlコマンドを使用してこれを行うことです。 curlを使用してxyz.com/aに正常にログインできますが、その後xyx.com/bを試行するとアクセスが拒否されます。

私は次を使用します:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

ユーザー/パスワードの部分なしで2行目を使用しようとしましたが、まだ機能しません。両方のページで同じCAが使用されているため、問題はありません。助言がありますか?ありがとう

93
ms1013

Webサイトは、おそらくセッション情報を保存するために cookies を使用します。走るとき

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curlは、2つの別々のセッションで2回実行されます。したがって、2番目のコマンドを実行すると、1番目のコマンドで設定されたCookieは使用できません。あるブラウザセッションでページaにログインし、別のブラウザセッションでページbにアクセスしようとしたかのようです。

あなたがする必要があるのは、save最初のコマンドで作成されたクッキーです:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

そして、2番目を実行するときにそれらを読み戻します。

curl --cookie ./somefile https://xyz.com/b

あるいは、同じコマンドで両方のファイルをダウンロードしてみてください。同じCookieを使用すると思います。

114

また、ブラウザ経由でログインし、Cookieを含むすべてのヘッダーでコマンドを取得することもできます。

開発者ツールの[ネットワーク]タブを開き、ログインして、必要なページに移動し、[cURLとしてコピー]を使用します。

screenshot

82
user

いくつかのグーグル検索の後、私はこれを見つけました:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

うまくいくかどうかはわかりませんが、正しい方向に導くかもしれません。

45
Joe Mills