利用Python中的Requests模块能够实现Post,Get等发送功能,我以登陆某网站为例,记录使用Post发送用户名、密码及图形验证码,以及经过Cookies直接登陆的内容。php
1.利用POST发送用户名、密码及验证码。这里的验证码没有进行识别,只好先读取验证验图片,手动输入。html
1 def LoginByPost(): 2 imgUrl='http://***/authcode.php' 3 s=requests.session() 4 res=s.get(imgUrl,stream=True) 5 im=Image.open(BytesIO(res.content)) 6 im.show() 7 code=input() 8 loginUrl='http://***/admin_loginCheck.php' 9 postData={'pname':'admin','password':'***','validateCode':code} 10 rs=s.post(loginUrl,postData)
11 url='http://***/***/admin_honor.php' 12 res=s.get(url)
13 res.encoding='utf-8'
14 print(res.text)
此时,能够看出咱们已经成功登陆,并输出指定页面的内容。python
2.利用Cookies直接登陆。无需用户名、密码及验证码。此时,须要先得到登陆该网站后的Cookies,一种方法是经过浏览器查看Cookies,另外一种方法是利用上面的requests.session获取登陆后的Cookies。咱们采用第二种方式。浏览器
(1)经过requests.session获取Cookies。服务器
def GetCookie(): imgUrl='http://***/authcode.php' s=requests.session() print(s.cookies.get_dict())#先打印一下,此时通常应该是空的。 res=s.get(imgUrl,stream=True) im=Image.open(BytesIO(res.content)) im.show() code=input() loginUrl='http://***/admin_loginCheck.php' postData={'pname':'admin','password':'***','validateCode':code} rs=s.post(loginUrl,postData) c=requests.cookies.RequestsCookieJar()#利用RequestsCookieJar获取 c.set('cookie-name','cookie-value') s.cookies.update(c) print(s.cookies.get_dict())
(2)利用上面获取的Cookies直接登陆cookie
def DirLogin(): s=requests.session() url='http://***/***/admin_honor.php' headers={ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'Host': '***', 'Referer': 'http://***/***/admin_index.php' } cookies={'PHPSESSID': 'cnguud4r1hmn3passs906odp21'}#这里就是利用上面的函数得到的Cookies rs=s.get(url,headers=headers,cookies=cookies,verify=False) rs.encoding='utf-8' print(rs.text)
此时,能够直接查看所须要页面的内容。session
说明:然并卵,你会发现,经过Cookies直接登陆,有时好用,有时无用。缘由在于此网站是经过服务器的Session对客户进行判断,而Session在服务器端每每会设置会话期限,若是到了时间,服务器会把这个Session删除,这时,你还得再次利用第一个函数进行Cookie的获取。app