设为首页 收藏本站
查看: 1144|回复: 0

[经验分享] python类库31[httplib2处理http的get和post]

[复制链接]

尚未签到

发表于 2015-4-27 12:51:08 | 显示全部楼层 |阅读模式
  
  一 http的get和post
  
  get和post的区别:get是从服务器上获取数据,post是向服务器传送数据。
  (1)参数传输方式,
      GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接;例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
     POST提交:把提交的数据放置在是HTTP包的包体中。因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
  (2)传输数据的大小,
     首先声明HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。而在实际开发中存在的限制主要有:
     GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。因此对于GET提交时,传输数据就会受到URL长度的限制。
     POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
  (3)安全性:
     POST的安全性要比GET的安全性高。这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。
  
  get和post的相同:  get,post协议都是在http上运行的。
  get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全。
  post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form- urlencoded。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
  
  简单地讲,HTTP web 服务是指以编程的方式直接使用 HTTP 操作从远程服务器发送和接收数据。如果你要从服务器获取数据,使用HTTP GET;如果你要向服务器发送新数据,使用HTTP POST. 一些更高级的HTTP Web 服务 API也允许使用HTTP PUT 和 HTTP DELETE来创建、修改和删除数据。

  二 web实例
  实例来自:http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?op=TranslatorString ,用来实现中英文的翻译的免费的webservice,同时提供get+post+soap访问支持。
  
  三 python的http web库
  
  Python 3 带有两个库用于和HTTP web 服务交互:
•http.client 是HTTP 协议的底层库.
•urllib.request 建立在http.client之上一个抽象层。它为访问HTTP 和 FTP 服务器提供了一个标准的API,可以自动跟随HTTP 重定向, 并且处理了一些常见形式的HTTP 认证。
  
  •httplib2,一个第三方的开源库,它比http.client更完整的实现了HTTP协议,同时比urllib.request提供了更好的抽象。
  python的HTTP库不支持缓存,而httplib2支持。
Python的HTTP 库不支持最后修改时间检查,而httplib2 支持。
Python HTTP库不支持ETag,而httplib2支持.
Python的 HTTP库不支持压缩,但httplib2支持。
httplib2 帮你处理了永久重定向。它不仅会告诉你发生了永久重定向,而且它会在本地记录这些重定向,并且在发送请求前自动重写为重定向后的URL。
  
  httplib2的
  下载:http://code.google.com/p/httplib2/
  安装:python31 setup.py install
  
  四 httplib2使用get和post实例



# -*- coding: UTF-8 -*-

def TestHttpGet():
    import httplib2
    #httplib2.debuglevel = 1

    word='中国'
    urlstr = 'http://fy.webxml.com.cn/webservices/EnglishChinese.asmx/TranslatorString' + '?wordKey=' + word
    h = httplib2.Http('.cache')
    response,content = h.request(urlstr)
    #for item in response.items(): print(item)
    print(content.decode('utf-8'))
    #print(content)
   
def TestHttpPost():
  import httplib2
  from urllib.parse import urlencode   
  
  #httplib2.debuglevel = 1

  word='美国'
  urlstr = 'http://fy.webxml.com.cn/webservices/EnglishChinese.asmx/TranslatorString'
  data={'wordKey':word}
  
  h = httplib2.Http('.cache')
  response,content = h.request(urlstr, 'POST', urlencode(data), headers={'Content-Type': 'application/x-www-form-urlencoded'})  
  #for item in response.items(): print(item)
  print(content.decode('utf-8'))
  #print(content)
  
TestHttpGet()
TestHttpPost()  
  
  结果如下:
DSC0000.png
  
  当从英文到中文翻译后得到的结果xml貌似不是utf8的,总是有错误:
  content.decode('utf-8')报错UnicodeEncodeError: 'gbk' codec can't encode character '\u0283' in position 224: illegal multibyte sequence
  
  完!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61242-1-1.html 上篇帖子: A Byte of Python(简明Python教程) for Python 3.0 下载 下篇帖子: Python Tutorial(二):使用Python解释器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表