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


124

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

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

私は以下を使用します:

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

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

回答:


146

このWebサイトでは、Cookieを使用してセッション情報を保存している可能性があります。あなたが走るとき

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

curl2つの別々のセッションで2回実行されます。したがって、2番目のコマンドを実行すると、1番目のコマンドで設定されたCookieは使用できなくなります。a1つのブラウザーセッションでページにログインbし、別のブラウザーセッションでページにアクセスしようとした場合と同じです。

あなたがする必要があるのは最初のコマンドで作成されたクッキーを保存することです:

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

そして、2番目の実行時にそれらを読み戻します。

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

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


これを試しても、に保存されているCookie somefileにパスパラメータ(/aこの場合)が含まれており、2番目の呼び出しに転送されないため、これは機能しません。ファイル内のCookieを編集してスラッシュのみを挿入すると、機能します(Cookieは2番目の呼び出しに転送されます)。パスがcookieファイルに保存されないようにすることが可能かどうか知っていますか?
рüффп

124

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

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

スクリーンショット


12
これは深い答えです!質問への回答方法を示しているため、質問には直接回答しません。
bgStack15 2017年

5
これは最も役立つ回答の1つです。それは本当にあなたがマルチステップ認証でさえも観察して理解することを可能にします。
ピエールD

これらの素晴らしいツールに埋め込まれたこの機能については知りませんでした。超便利!
ティモシーC.クイン

52

いくつかググリングした後、私はこれを見つけました:

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

うまくいくかどうかはわかりませんが、正しい方向に導く可能性があります。


9
これは、フォームの送信を期待するWebサイトがある場合に機能します。ソースを見て<form>画像を見つけ、フィールドの名前と、投稿先のURLを確認する必要があります。Webブラウザーデバッガーを使用して投稿リクエストを検索し、何が送信されているかを確認できます。それは少し簡単です。
stonefury 2014年

0

私の答えは、@ JoeMillsと@userからのいくつかの以前の答えのmodです。

  1. cURLサーバーにログインするコマンドを取得します。

    • Webサイトのログインページを読み込み、開発者ツールの[ネットワーク]ペインを開く
      • Firefoxで、ページを右クリックし、「要素の検査(Q)」を選択して、「ネットワーク」タブをクリックします。
    • ログインフォームに移動し、ユーザー名、パスワードを入力してログインします
    • ログイン後、ネットワークペインに戻り、上部までスクロールしてPOSTエントリを見つけます。右クリックして[コピー]-> [CURLとしてコピー]を選択します
    • これをテキストエディターに貼り付け、コマンドプロンプトでこれを試して、機能するかどうかを確認します
      • 一部のサイトでは、このタイプのログインスプーフィングをブロックする強化が行われている可能性があります。このため、バイパスするために以下の追加の手順が必要になります。
  2. ログイン後にセッションCookieを保存できるようにcURLコマンドを変更する

    • エントリを削除します -H 'Cookie: <somestuff>'
    • curl最初に追加-c login_cookie.txt
    • この更新されたcurlコマンドを実行'login_cookie.txt'すると、同じフォルダーに新しいファイルが作成されます
  3. ログインが必要なこの新しいCookieを使用して新しいWebページを呼び出します

    • curl -b login_cookie.txt <url_that_requires_log_in>

私はUbuntu 20.04でこれを試しました、そしてそれは魅力のように機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.