質問: Scrapyでログインが必要なサイトをクロールするプログラムを書いています。 本来の解決した問題は下記リンクになりますが、解決策を模索している最中に関連する疑問がありましたので、質問させていただきます。 このサイトには2つの異なるログイン画面があり、ログイン後の遷移先ページは同一です。 ログイン後、サイト内の別ページにリクエストを投げます。(※1) 片方のログインページからログインした際は、期待するページが返ってきますが、もう一方からログインした際は、セッションエラーのページが返ってきます(どちらもステータスは200です)。 ブラウザのディベロッパーツールでHTMLメソッド・URL・リクエストヘッダーを確認すると2つに違いはありません。 > > ※1 リンクをクリックするのではなく、URLを手打ちして遷移しています > > > サーバー側ではリクエストヘッダー以外にどのようにしてセッションを管理していると考えられますでしょうか。 私自信、セッションやクッキーなどの知識が乏しく、解決への糸口がつかめずにおります。 セッション管理やユーザーの特定に関する一般的な方法論を教えていただけると助かります。
回答: > > ※1 リンクをクリックするのではなく、URLを手打ちして遷移しています > > > そもそも、セッションが開始されていないのではありませんか。 セッションの場合はCookieで管理されている場合が多いと思いますが、セッションが開始された時点でセッションIDも発行されます。 一度、発行されたセッションIDのCookieを何度も使いまわせるものではありません。 * PHP: session_start - Manual この仮定が正しいとすれば、解決法はセッションが開始されるURIへリクエストを送り、セッションIDを受け取った上でセッションIDを使いまわしてください。 1. a.php でセッションIDを得る(セッションの開始) 2. b.phpに遷移し、セッションIDを送信する 通常のブラウザの操作と同じようにHTTPリクエストを送ってやれば、問題はありません。 Re: kentakozuka さん