Urllib2を使用してurlを開き、特定のcookieテキストをサーバーに送信しようとしています。例えば。サイトを開きたい チェスの問題を解決する search = 1。どうすればいいのですか?
私は次のことをしようとしています:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
前もって感謝します
Cookieは単なるHTTPヘッダーです。
import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")
HTTPヘッダーをリクエストに追加する他の方法については、 rllib2の例 を参照してください。
Cookieを処理する方法は他にもあります。 cookielib などの一部のモジュールは、Webブラウザーのように振る舞います-以前に取得したCookieを覚えて、次のリクエストで自動的に再送信します。
多分 cookielib.CookieJar を使うと助けになるでしょう。たとえば、フォームを含むページに投稿する場合:
import urllib2
import urllib
from cookielib import CookieJar
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# input-type values from the html form
formdata = { "username" : username, "password": password, "form-id" : "1234" }
data_encoded = urllib.urlencode(formdata)
response = opener.open("https://page.com/login.php", data_encoded)
content = response.read()
編集:
Piotrのコメントの後、少し詳しく説明します。ドキュメントから:
CookieJarクラスには、HTTP Cookieが格納されます。 HTTPリクエストからCookieを抽出し、HTTPレスポンスでそれらを返します。 CookieJarインスタンスは、必要に応じて含まれるCookieを自動的に期限切れにします。サブクラスは、ファイルまたはデータベースからのCookieの保存と取得も行います。
したがって、CookieJar
インスタンスでどのようなリクエストを行っても、すべてのCookieは自動的に処理されます。お使いのブラウザのようにちょっと:)
私は自分の経験からしか話せませんが、Cookieの99%の使用例はCookieを受信し、そのセッションの後続のすべてのリクエストでCookieを送信する必要があることです。上記のコードはそれを処理し、透過的に処理します。
Requests と呼ばれる優れたHTTP Pythonライブラリーをご覧ください。 HTTPに関連するすべてのタスクがurllib2より少し簡単になります。 Cookies クイックスタートガイドのセクションから:
独自のCookieをサーバーに送信するには、cookiesパラメーターを使用できます。
>>> cookies = dict(cookies_are='working')
>>> r = requests.get('http://httpbin.org/cookies', cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'
urllib2
モジュールはPython 3のいくつかのモジュールに分割されているため、この回答は機能しません。
from urllib import request
opener = request.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")