怎样用原生的urllib2+httplib请求Https

技术怎样用原生的urllib2+httplib请求Https本篇文章给大家分享的是有关怎样用原生的urllib2+httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,

本篇文章给大家分享的是有关怎样用原生的urllib2 httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

环境

python2.7.5

# https服务器生成证书

https://www.cnblogs.com/loleina/p/8418111.html

#HTTPSConnection

密钥# https服务器使用的键

ca_certs #https服务器使用的加拿大

证书#在浏览器下载的证书窗户下载后Linux操作系统操作系统可以使用

### https.py

导入urllib2、httplib、ssl、套接字

DEFAULT _ HTTP _ TIMEOUT=10 #秒

# http://代码。活动状态。com/recipes/577548-https-httplib-client-connection-with-certificate-v/

# http://stackoverflow。com/questions/1875052/using-pain-certificates-with-URL lib 2

类httpclientauthhandler(URL lib 2 .httphandler):

'''

允许使用HTTPS连接发送客户端证书。

这个版本也验证了对等(服务器)证书,因为.

如果你不认证和你说话的人,WTF就是加密套接字协议层的意义所在!

'''

def __init__(自身,密钥=无,证书=无,ca _ certs=无,ssl _ version=无,密码=无):

urllib 2。Httpshandler。_ _ init _ _(自我)

self.key=key

自我认证

self.ca_certs=ca_certs

self.ssl_version=ssl_version

self.ciphers=密码

def https_open(self,req):

#我们不是传入对连接类的引用,而是传入

#对功能的引用,出于所有意图和目的,

#将充当构造函数

返回自我。do _ open(self。获取连接,请求)

def get_connection(自身,主机,超时=DEFAULT _ HTTP _超时):

返回HTTPSConnection(主机,

key_file=self.key,

cert_file=self.cert,

>                timeout = timeout,

                ciphers = self.ciphers,

                ca_certs = self.ca_certs )

class HTTPSConnection(httplib.HTTPSConnection):

    '''

    Overridden to allow peer certificate validation, configuration

    of SSL/ TLS version and cipher selection.  See:

    http://hg.python.org/cpython/file/c1c45755397b/Lib/httplib.py#l1144

    and `ssl.wrap_socket()`

    '''

    def __init__(self, host, **kwargs):

        self.ciphers = kwargs.pop('ciphers',None)

        self.ca_certs = kwargs.pop('ca_certs',None)

        self.ssl_version = kwargs.pop('ssl_version', ssl.PROTOCOL_SSLv23)

        httplib.HTTPSConnection.__init__(self,host,**kwargs)

    def connect(self):

        sock = socket.create_connection( (self.host, self.port), self.timeout )

        if self._tunnel_host:

            self.sock = sock

            self._tunnel()

        self.sock = ssl.wrap_socket( sock, 

                keyfile = self.key_file, 

                certfile = self.cert_file,

                ca_certs = self.ca_certs,

                cert_reqs = ssl.CERT_REQUIRED if self.ca_certs else ssl.CERT_NONE )

### test.py

import urllib2

import urllib

import https

import ssl

import json

client_cert_key = "etcd-client-key.pem" # file path

client_cert_pem = "etcd-client.pem"     # file path 

ca_certs = "etcd-ca.pem"                # file path

handlers = []

handlers.append( https.HTTPSClientAuthHandler( 

    key = client_cert_key,

    cert = client_cert_pem,

    ca_certs = ca_certs,

    ssl_version = ssl.PROTOCOL_SSLv23,

    ciphers = 'TLS_RSA_WITH_AES_256_CBC_SHA' ) )

http = urllib2.build_opener(*handlers)

# request https

# GET

resp = http.open('https://xxxx:2379/v2/members')

data = resp.read()

# POST

req = urllib2.Request(url)  

data = urllib.urlencode(data)

resp = http.open(req, data)

# PUT

request = urllib2.Request(url, data=json_data)

request.add_header('Content-Type', 'application/json')

request.get_method = lambda: 'PUT'

resp = http.open(request)

# DELETE

request = urllib2.Request(url, data=data)

request.get_method = lambda: 'DELETE'

resp = http.open(request)

resp.close()

以上就是怎样用原生的urllib2+httplib请求Https,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/133806.html

(0)

相关推荐

  • 高级语言程序设计实验4-2

    技术高级语言程序设计实验4-2 高级语言程序设计实验4-2题目描述有 12 人围坐成一圈玩报数游戏,从1号人员开始顺时针报数,报到k的人员被淘汰出局;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从

    礼包 2021年11月27日
  • Python中如何实现Scrapy+adbapi提高数据库写入效率

    技术Python中如何实现Scrapy+adbapi提高数据库写入效率今天就跟大家聊聊有关Python中如何实现Scrapy+adbapi提高数据库写入效率,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下

    攻略 2021年10月21日
  • Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间

    技术Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间 Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间项目体积是困扰小程序开发者的一大问题,如

    礼包 2021年11月26日
  • html进度条代码(html进度条显示百分比)

    技术html5进度条的标签是哪个本篇内容主要讲解“html5进度条的标签是哪个”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html5进度条的标签是哪个”吧!

    攻略 2021年12月15日
  • 丽江到香格里拉要多久,丽江古城去香格里拉怎么坐车

    技术丽江到香格里拉要多久,丽江古城去香格里拉怎么坐车丽江古城到香格里拉大概有200公里左右丽江到香格里拉要多久,最方便的到达和游玩方式是乘坐旅游专线车,旅游专线车有只发香格里拉的,有中停游玩上虎跳峡,有中停游玩中虎跳峡的

    生活 2021年10月24日
  • Dynamic Batching不生效该怎么办

    技术Dynamic Batching不生效该怎么办Dynamic Batching不生效该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在项目开发

    攻略 2021年11月16日