Python利用urllib/2模拟Http的Post请求调用php
2013-10-21 22:12
591 查看
一、应用需求
VSO平台的推广系统已接近尾声,还有最后一个问题就是每个月末对分红进行结账,将平台订单金额产生的分红打到用户的账户上,这种情况肯定要用Linux的定时任务来完成,结合前面的那篇《Python调用php》依然采用Python调用php的方式来实现。这次使用Python中的urllib和urllib2模块完成模拟http发送post请求来调用结算页面,执行数据库操作。这种方式相比上一篇将的方式要灵活、可行的多,上一篇中的方式只能调用单独的php处理页面,然后获取返回结果,无法真正模拟从url访问web站点。由于系统是基于Discuz进行的二次开发,我们要利用http://WEBIP/index.php?do=user&view=scan_prom_event这种url形式,它的控制器才会根据url里面的参数将我们的请求定位到指定页面。
urllib和urllib2是Python的一个获取Url的模块。它用urlopen()的形式提供了非常简洁的接口,支持获取url的多种类别的协议,例如HTTP、FTP等,它的用途非常广泛,批量上传文件,网络爬虫等等(就是在网络上抓取网络流中的内容保存下来,并对其进行分析处理)。urllib和urllib2都是接收URL请求的相关模块,但是提供了不同的功能。最显著的地方在于:
urllib2可以接收一个Request类的实例来设置URL请求的headers,而urllib仅可以接受URL,这意味着你不能伪装你浏览器的User-Agent,而这有可能浏览器会拒绝你的访问,不做任何处理。而urllib提供了urlencode方法,它可以将key-value这样的键值对转换成我们想要的格式,比如:data={ ‘do’ : 'user' , 'view' : 'scan_prom_event'} , 经过urlencode转码后会变为do=user&view=scan_prom_event的形式,而且当url地址中含有中文的时候,会对其进行转码处理。
二、实现代码
三、代码分析
代码实现了这样的功能:发送请求到目的页面,最终的url会是这样的形式:http://WEBIP/index.php?do=prom&view=scan_prom_event,Discuz会将它解析到指定文件,执行查询和更新数据库操作,在php处理页面对数据库操作进行try{...}catch(){}捕捉,如果抛出异常了则将异常打印出来,如果一切正常就不做处理。这里对日常进行了日志处理,将打印的异常和当前时间保存在log文件中。
四、Linux定时任务
采用Linux自带的crontab,这里就不啰嗦了。
crontab -e
59 23 28-31 * * [ `date -d tomorrow +\%e` -eq 1 ]&&(/home/houqd/houqd.py)
这里仅仅是开个头提供一个思路方法,将来肯定还有很多地方会用到。加油,坚持每天的学习!!
VSO平台的推广系统已接近尾声,还有最后一个问题就是每个月末对分红进行结账,将平台订单金额产生的分红打到用户的账户上,这种情况肯定要用Linux的定时任务来完成,结合前面的那篇《Python调用php》依然采用Python调用php的方式来实现。这次使用Python中的urllib和urllib2模块完成模拟http发送post请求来调用结算页面,执行数据库操作。这种方式相比上一篇将的方式要灵活、可行的多,上一篇中的方式只能调用单独的php处理页面,然后获取返回结果,无法真正模拟从url访问web站点。由于系统是基于Discuz进行的二次开发,我们要利用http://WEBIP/index.php?do=user&view=scan_prom_event这种url形式,它的控制器才会根据url里面的参数将我们的请求定位到指定页面。
urllib和urllib2是Python的一个获取Url的模块。它用urlopen()的形式提供了非常简洁的接口,支持获取url的多种类别的协议,例如HTTP、FTP等,它的用途非常广泛,批量上传文件,网络爬虫等等(就是在网络上抓取网络流中的内容保存下来,并对其进行分析处理)。urllib和urllib2都是接收URL请求的相关模块,但是提供了不同的功能。最显著的地方在于:
urllib2可以接收一个Request类的实例来设置URL请求的headers,而urllib仅可以接受URL,这意味着你不能伪装你浏览器的User-Agent,而这有可能浏览器会拒绝你的访问,不做任何处理。而urllib提供了urlencode方法,它可以将key-value这样的键值对转换成我们想要的格式,比如:data={ ‘do’ : 'user' , 'view' : 'scan_prom_event'} , 经过urlencode转码后会变为do=user&view=scan_prom_event的形式,而且当url地址中含有中文的时候,会对其进行转码处理。
二、实现代码
#!/usr/bin/python import os import urllib import urllib2 import time url="http://192.168.1.150/index.php" params={'do':'user','view':'scanpromevent','scan_event':'1'} data=urllib.urlencode(params) req=urllib2.Request(url,data) response=urllib2.urlopen(req) res=response.read() if bool(res) : file_object=open("/var/log/scan_prom_event.log","a") try : now = time.strftime('%Y-%m-%d %H-%M-%S') file_object.writelines("\n============================"+now+"==================================\n") file_object.writelines(res) file_object.writelines("\n=================================================================================") file_object.flush() finally : file_object.close()
三、代码分析
代码实现了这样的功能:发送请求到目的页面,最终的url会是这样的形式:http://WEBIP/index.php?do=prom&view=scan_prom_event,Discuz会将它解析到指定文件,执行查询和更新数据库操作,在php处理页面对数据库操作进行try{...}catch(){}捕捉,如果抛出异常了则将异常打印出来,如果一切正常就不做处理。这里对日常进行了日志处理,将打印的异常和当前时间保存在log文件中。
四、Linux定时任务
采用Linux自带的crontab,这里就不啰嗦了。
crontab -e
59 23 28-31 * * [ `date -d tomorrow +\%e` -eq 1 ]&&(/home/houqd/houqd.py)
这里仅仅是开个头提供一个思路方法,将来肯定还有很多地方会用到。加油,坚持每天的学习!!
相关文章推荐
- 【python】利用http的POST请求实现自动翻译机
- Python:HTTP请求模块(httplib/urllib,GET/POST,php),Web服务器模块
- 利用HttpClient.class.php本地模拟post请求
- http请求远程接口获得JSON数据(1) --- 利用HttpURLConnection发送post/get请求
- PHP如何通过Http Post请求发送Json对象数据?
- java 利用httpclient 3.1 和 httpclient4.1.2发送post请求
- php模拟post提交请求,调用接口
- java 利用httpclient 3.1 和 httpclient4.1.2发送post请求
- php模拟post提交请求,调用接口
- python使用urllib2提交http post请求的方法
- java 利用httpclient 3.1 和 httpclient4.1.2发送post请求
- 利用HttpURLConnection发送post请求上传多个文件
- C#源码刷新网页 最小化托盘http get和post请求配置保存版权时间限制定时调用 单实例运行,如果已经运行则激活窗口到最前显示
- 用PHP发送HTTP POST 请求,获得返回结果。(转)
- AngularJs的$http发送POST请求,php无法接收Post的数据解决方案
- 用PHP模拟HTTP中的POST请求JSP网页,提交数据
- Js/Ajax中发送HttpPost请求调用WebService
- Android HttpUrlConnection 发送Post请求 PHP页面$_POST接收不到问题
- python写http post请求的四种请求体