美文网首页程序员
如何使用python客户端发送http2请求

如何使用python客户端发送http2请求

作者: 刘晓佳rachel | 来源:发表于2018-03-20 17:51 被阅读666次

选型:目前网上盛行的python模拟客户端发送http2.0的库主要为hyper,毫无疑问,大胆一试。选型参考:https://github.com/http2/http2-spec/wiki/Implementations

如何安装hyper?!

说明:HTTP/2协议只使用在加密的https端口,规范要求非常新的TLS支持。  对于较早版本的Python(例如Python2.7.5),我们使用PyOpenSSL来提供我们所需的TLS支持,而PyOpenSSL需要cryptography等标准库,安装着实不便。当使用Python 3.4及更高版本时,这由标准库自动提供。本文以Python2.7.13版本安装hyper为例。

1、在线安装hyper

1)可以使用pip安装hyper

    $pip install hyper

2)若python版本较老,无pip命令,可以使用easy_install安装hyper

      $easy_install hyper

2、离线安装hyper

    若在线安装hyper失败,可以登录github(https://github.com/Lukasa/hyper/tree/master)下载hyper库,离线安装

    $python setup.py install

如何使用hyper发送http2.0请求?

举两个小栗子以说明:1、发送http2.0请求到需要服务端认证的443端口;2、发送http2.0请求到需要服务端证书认证和客户端证书认证的443端口;

1、发送http2.0请求到需要服务端认证的服务

  >>>c=HTTPConnection('10.10.10.231',port=443,secure=True,ssl_context=tls.init_context(cert_path='/home/ubuntu/certs/ca.crt')

  >>> c.request('GET', '/api/aa/v1/testtcp/helloworld')

2、发送http2.0请求到需要服务端认证和客户端认证的服务

  >>>c=HTTPConnection('10.10.10.231',port=443,secure=True,ssl_context=tls.init_context(cert_path='/home/ubuntu/certs/ca.crt',cert=('/home/ubuntu/certs/client.crt','/home/ubuntu/certs/client.key')))

  >>> c.request('GET', '/api/bb/v1/testtcp/helloworld')

hyper如何兼容发送http1请求?

如下所示举两个小栗子以说明:1、发送http请求到服务不需认证的80端口;2、发送https请求到需要服务端证书认证的443端口;

1、发送http请求到服务不需认证的80端口

  >>>c=HTTPConnection('10.10.10.231',port=80)

  >>>c.request('GET', '/api/aa/v1/testtcp/helloworld',)

2、发送https请求到需要服务端证书认证的443端口

>>>c=HTTPConnection('10.10.10.231',port=443,secure=True,ssl_context=tls.init_context(cert_path='/home/ubuntu/certs/ca.crt')

  >>> c.request('GET', '/api/aa/v1/testtcp/helloworld')

注:HTTP/2采用多路复用方式,一个连接被分为多个流(stream),每个流都有自己的请求-响应对。在hyper中,在如上所示,当发送请求c.request时,请求返回stream id时(如上所示的“1”),则表示当前使用http2.0发送请求;若c.request无stream id返回值时,则表示使用http1.0发送请求。当发送https请求,即连接需要认证时,secure=True,ssl_context为证书设置;当发送http请求时,secure=False。ssl_context=tls.init_context(cert_path=None, cert=None, cert_password=None),ssl_context参数包括cert_path、cert、cert_password,可以默认不填。ssl_context的cert_path为服务端证书路径,cert为客户的证书路径。当cert_path=None, cert=None默认使用hyper证书。

引:想了解关于hyper库的更多详情,请参考:http://hyper.readthedocs.io/en/latest/quickstart.html.

相关文章

  • 如何使用python客户端发送http2请求

    选型:目前网上盛行的python模拟客户端发送http2.0的库主要为hyper,毫无疑问,大胆一试。选型参考:h...

  • 【OK】flask笔记(十五):上下文对象

    一、Flask如何接收客户端发送请求? python框架程序从客户端收到请求时,要让视图函数能访问一些对象,且该对...

  • 发送http请求

    发送http请求 发送http2请求 参考链接:curl支持h2: https://segmentfault.co...

  • IntentService和HandlerThread

    IntentService 概述 处理异步请求的Service 客户端使用startService()发送异步请求...

  • Python使用grequests并发发送请求

    Python使用grequests并发发送请求 前言 requests是Python发送接口请求非常好用的一个三方...

  • Headers信息

    请求首部字段: 请求首部字段是从客户端->服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、...

  • Nuxt.js 发送两次请求

    使用Nuxt.js 时,会在asyncData中发送请求,这个操作在服务器端就完成了 到了客户端不会再次发送请求,...

  • 图解HTTP--笔记4

    请求首部字段 请求首部字段是从客户端往服务器端发送请求报文中所使用的字段, 用于补充请求的附加信息、客户端信息、对...

  • HTTPS具体过程,7次握手,以及如何防止中间人攻击的

    三次握手 客户端向服务器发送SYN请求服务器发送ACK回应请求,并同时发送一个SYN的请求给客户端客户端回应ACK...

  • Http常用方法

    1.Get-》服务器向客户端发送请求 2.post->客户端数据发送服务网关应用程序,客户端发送post 请求给服...

网友评论

    本文标题:如何使用python客户端发送http2请求

    本文链接:https://www.haomeiwen.com/subject/fhwbqftx.html