# -*- 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 件のコメント:
コメントを投稿