• python类库31[httplib2处理http的get和post]


    一 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()

    结果如下:

    当从英文到中文翻译后得到的结果xml貌似不是utf8的,总是有错误:

    content.decode('utf-8')报错UnicodeEncodeError: 'gbk' codec can't encode character '\u0283' in position 224: illegal multibyte sequence

    完!


    作者:iTech
    微信公众号: cicdops
    出处:http://itech.cnblogs.com/
    github:https://github.com/cicdops/cicdops

  • 相关阅读:
    GAN阶段性小结(损失函数、收敛性分析、训练技巧、应用“高分辨率、domain2domain”、研究方向)
    MMD :maximum mean discrepancy
    Chinese-BERT-wwm
    VGG16学习笔记
    jupyter notebook使用技巧--命令行模式以及在Markdown模式使用的操作(4)
    不同领域公开数据集下载
    数据挖掘竞赛,算法刷题网址汇总
    在keras下实现多个模型的融合
    问题集合
    开源测试数据集合
  • 原文地址:https://www.cnblogs.com/itech/p/1931946.html
Copyright © 2020-2023  润新知