🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

1763閲覧

【python】ブラウザにcookieをセットしたい

kazukichi

総合スコア12

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2019/10/27 08:08

編集2019/11/01 03:28

環境

Python 3.7.2
requests 2.22.0

実現したいこと

ブラウザに別途取得したcookieをセットしたいです。
現状cookieをセットし通信後ブラウザからcookieを取得し表示(print)をしているのですが自分がセットした物がなく右往左往しております。

経験不足で言葉足らずになっている部分もあるかと思いますがよろしくお願いいたします。

ソース

import requests #cookieをセット cookie = { "_asfasdf":"MjvzxcvzxvNDo0MA%3D%3D%0A", } #通信 response = requests.get("http://www.example com/", cookies=cookie) #表示 print(response.text) #結果 #セットしたものが表示されず

参考ページ

[Python] requestsモジュールを使って楽々HTTP(s)通信を行う

requests.getでcookieが必要な年齢確認ページなどを回避する方法

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2019/11/01 03:31 編集

www.example.com など例示用に予約されているものに修正ください。 まっとうなサイトであればトラフィック増などで迷惑がかかる恐れがあります。 また、悪質なサイトであった場合はこの質問から誘導することになってしまいます。
kazukichi

2019/11/01 03:27

ご指摘頂きありがとうございます。 修正させて頂きます。
guest

回答2

0

一番大事なこと書いてなかったので追記。

リクエストで送信したcookieがレスポンスで返ってくる事は
サーバー側の処理でそのままレスポンスとして返す処理をしていない限りありません。

また、Pythonの処理でレスポンスのcookieを受け取っても、ブラウザーには保存されません。
※このブラウザーがどう絡むのかは質問からはよくわかりませんが。。。


まず、http通信にはリクエストとレスポンスがあります。

質問で、cookieにセットされているのは
httpサーバーに対してリクエスト(GET)を行う際に
リクエストヘッダーにcookieをセットしているだけです。

GETリクエストした際のレスポンスのレスポンスヘッダーは、リクエストした先で設定されます。
リクエストする方からは一切制御できません。

また、response.text はレスポンスのbody部を取得するものです。
cookieはレスポンスヘッダーにSet-Cookieヘッダーとして返ってきます。
全てのレスポンスヘッダーはresponse.headersで取得できます。

ここまでいろいろ記載しましたが、すべてPythonの中で起こる事柄です。
リクエストからレスポンス取得まで、ブラウザは一切関係しません。

ブラウザに別途取得したcookieをセットしたいです。

この一文が具体的にどういう事をしたいのかさっぱりわからないので
具体的に何をしたいのか質問に記載ください。

投稿2019/11/01 00:29

編集2019/11/01 03:40
Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazukichi

2019/11/01 03:32

ご丁寧にありがとうございます。 もう少し内容を精査して出直してまいります。
guest

0

ベストアンサー

http://www.testpage.com/のサーバーサイドでのCookieの表示処理が間違っているのでは?

投稿2019/10/27 15:46

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazukichi

2019/10/30 17:03

ご返信遅くなり大変申し訳ございません。 回答頂きありがとうございます。 「サーバーサイドでのCookieの表示処理」 ということはサーバー側で何かしなければならないということでしょうか? よろしくお願いいたします。
otn

2019/10/31 01:02

#表示 print(response.text) #結果 #セットしたものが表示されず と、お書きと言うことは、"http://www.testpage.com/"にアクセスすると、そこで起動されるプログラムが、レスポンスボディでクッキーを表示するような処理にしているのかと思いましたが、違うのでしょうか?
kazukichi

2019/10/31 03:43

ページにアクセスすると起動ではなくpythonの開発環境であるspyderを使用してtestpage.comにアクセス(.get?)しこちらが指定したcookieをセットしセットされて入る事を確認したいのですか、、 言葉足らずで恐縮ではございますがよろしくお願いします。
otn

2019/10/31 06:40

よくわかりません。 そもそも、ウェブサーバーとブラウザの間での、Cookieの仕組みを理解されていますか?
kazukichi

2019/11/01 03:34

知識不足で申し訳ありません。 出直してまいります。
otn

2019/11/01 04:47 編集

クッキーの仕組みというのは、 ・サーバープログラムで、ブラウザへの応答時にSet-Cookieヘッダで、クッキー名、値、対象ドメイン、有効期限を送ります ・ブラウザでは、サーバーからの上記情報を有効期限まで保存しておいて、対象ドメインへのリクエスト時に、Cookieヘッダでクッキー名と値を送ります つまり、サーバープログラムが、ブラウザに「ちょっとこの値覚えておいて」という機能です。
Y.H.

2019/11/01 04:59

この「ブラウザ」は「リクエストを送信するプログラム」と考えてください。 よって、Python(に限らずですが)からリクエストする場合は、 サーバーから「ちょっとこの値覚えておいて」と頼まれたのはPythonで作成したプログラムです。
otn

2019/11/01 06:03

ブラウザの代わりをプログラムで行う場合は、 高水準のライブラリを使うと、クッキー処理をライブラリが自動的にやってくれますが、 低水準のライブラリだと、Set-Cookieをみて、Cookieヘッダを作るというコードを自分で書く必要があります。
kazukichi

2019/11/01 16:02

ご丁寧ありがとうございます。 勉強させていいただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問