2015年8月14日金曜日

[Python][HTTP]Cookie 処理

urllib2.HTTPCookieProcessor() を使って Cookie 処理を行う。
# -*- coding: utf-8 -*-
## Cookie を使う
import urllib
import urllib2
import cookielib

# POST データ作成
req = {'field1':'abcde', 'field2':'12334'}
print req
params = urllib.urlencode(req)
print params

# Cookie handler
cj = cookielib.CookieJar()
cookieHandler = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookieHandler)
urllib2.install_opener(opener)

# localhost の Web サーバーに IIS を使っている場合は localhost 指定の Cookie を
# 作ることができないのでエラー終了する
url = 'http://localhost/cgi-bin/python/cookiePostResult.cgi'
request = urllib2.Request(url, params)
f = urllib2.urlopen(request)
print f.info()
data = f.read()
print data
print "================"
for index, cookie in enumerate(cj):
print index, ':', cookie
print cj
print "================"
url = 'http://localhost/cgi-bin/python/cookiePostResult2.cgi'
request = urllib2.Request(url)
f = urllib2.urlopen(request)
data = f.read()
print data
実行結果
$ python test04.py
{'field2': '12334', 'field1': 'abcde'}
field2=12334&field1=abcde
Date: Sun, 16 Jan 2011 07:12:21 GMT
Server: Apache/2.2.17 (Fedora)
Set-Cookie: FIELD1=abcde
Set-Cookie: FIELD2=12334
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Cookie POST Result</title>
</head>
<body>
<h1>Cookie POST Result</h1>
Field1: abcde<br/>
Field2: 12334<br/>
<a href="/cgi-bin/python/cookiePostResult2.cgi">次へ</a>
</body>
</html>
================
0 : <Cookie FIELD1=abcde for localhost.local/cgi-bin/python>
1 : <Cookie FIELD2=12334 for localhost.local/cgi-bin/python>
<cookielib.CookieJar[<Cookie FIELD1=abcde for localhost.local/cgi-bin/python>, <Cookie FIELD2=12334 for localhost.local/cgi-bin/python>]>
================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Cookie POST Result 2</title>
</head>
<body>
<h1>Cookie POST Result 2</h1>
Field1: abcde<br/>
Field2: 12334<br/>
</body>
</html>
Web サーバーが IIS の場合 localhost の名前解決ができない場合に Cookie の保存ができないようだ。実験した環境では Cookie の保存ができず urlopen() でエラーとなった。
Linux Apache でテストした時は localhost 指定でも問題なく urlopen() できた。

0 件のコメント:

コメントを投稿