_drush uli
_を使用して管理ユーザーとしてサイトにログインするコマンドラインを介してCURL要求を実行しようとしています。次に、別の宛先URLにリダイレクトされます。
リダイレクトされたURLが匿名ユーザーが利用できる非管理者パスである場合に機能しますが、管理者パスは403 Forbiddenを返します。これは、私のサイトが匿名ユーザーが管理ページにアクセスしようとするときに行うことです。
これは機能します:
curl -vk -L $(drush uli admin_username /node/1)
これによりHTTP 403 forbiddenが返されます:
curl -vk -L $(drush uli admin_username /admin/structure)
オプションのpath
パラメータはログイン後にリダイレクトされますが、CURLがそこに到達したときのようです...もうログインされておらず、匿名ユーザーのように応答が表示されています。
誰もがこれを経験しますか?
https://spinspire.com/article/automating-drupal-user-login-and-maintaining-session-curl のおかげで、私の問題は -cookie- jar CURLオプション ワンタイムログインリンクを生成した後、drushが管理パスにリダイレクトされている間、セッションCookieを維持します。
これが私の最後の作業コマンドです:
curl --cookie-jar cookie.txt -vk -L $(drush uli admin_username /admin/structure)
これにより、/admin/structure
からHTTP 200応答が返されます。
管理ページにアクセスすると、サイトはhttpからhttpsにリダイレクトされますか?その場合は、Drushに提供する--uriパラメータをhttpプロトコルではなくhttpsに設定して、それがより適切に機能するかどうかを確認してください。
リダイレクト間でCookieを渡すのに問題があるため、curl
は失敗します。 Wgetはこのタスクにより適したツールである必要があります。
wget -qO- $(drush -l http://mysite.local uli --no-browser admin admin/structure)
注:人間が読める形式で出力をテストするには、出力をhtml2text
コマンドにパイプします。
curl
を使用してページを取得するには、ユーザーの資格情報を使用して次のシェルスクリプトを試すことができます。
#!/usr/bin/env bash
url="https://www.example.com"
uri_php="/admin/structure"
user=admin
pass=admin
form_build_id=$(curl -s $url/user | grep -o 'form-[^" ]\{40,\}')
cookie=$(curl -sX POST -d "name=$user&pass=$pass&form_id=user_login&op=Log+in&form_build_id=$form_build_id" $url -D- | grep -o "SESS[^;]\{60,\}")
content=$(curl -s -H "Cookie: $cookie" ${url}${uri_php})
echo $content