我查了很多资料,都是说用以下的方法添加:
mport cookielib
import urllib
import urllib2
import re
from ghost import Ghost
import Cookie
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
cookieStr="SelectMenu=undefined; userName=admin; password=admin; vldcode="
opener.addheaders = [
("Cookie", cookieStr)
]
urllib2.install_opener(opener)
req = urllib2.Request("http://127.0.0.1:8080/redirct_index.htm", "", {
"Referer": "http://127.0.0.1:8080/login.htm"})
result = urllib2.urlopen(req).read()
然后和ghost关联就没有了
其实也很简单,只是这方面的资料很受,我查阅了ghost的API,才发现也一个很有用的方法:
load_cookies(cookie_storage, keep_old=False)
load from cookielib’s CookieJar or Set-Cookie3 format text file.
Parameters: |
|
---|
这个方法可以帮助我们设置cookie。
ghost.load_cookies(cj, True)
这样就ok了。
有时候我们通过urllib2拿不到cookie,这时候怎么办呢?
两种方法:
1.直接写ghost的header,上一篇博客中已经提到了:
ghost = Ghost()
#open webkit
url = 'http://10.88.8.37:20157/login.htm'
headers = {
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate, sdch",
"Accept-Language":"zh-CN,zh;q=0.8",
"Cache-Control":"max-age=0", #Cache-Control: max-age=0\r\n
"Connection":"keep-alive",
"Cookie":"userName=admin; password=admin ",
"Host":"127.0.0.1:8080",
"Pragma":"no-cache",
"Referer":"http://10.88.8.37:20157/index.htm",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36"
}
ghost.open(url,'get',headers)
另外一种方法是自己写CookieJar,然后调用ghost.load_cookies(cjq, True)。
这时候要注意,cookie里的cookie对象不是cookie.py这个库定义的,是cookielib.py这个库定义的。两者区别非常大。如果你有心可以看一下两个文件里关于cookie各自的定义
现在直接给出代码:
c1 =cookielib.Cookie(version=0, name='userName=admin; password', value='admin',
port=None, port_specified=False, domain='127.0.0.1',
domain_specified=False, domain_initial_dot=False,
path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)
cjq.set_cookie(c1)
ghost.load_cookies(cjq, True)
这里为什么要这么写呢?
name='userName=admin; password', value='admin',
port=None, port_specified=False, domain='10.88.8.37',
我发现set_cookie时set多个,他只有第一个有效,所以取了一下巧。
好了就这些,有问题的留言。
|