返回顶部
首页 > 资讯 > 精选 >怎样用原生的urllib2+httplib请求Https
  • 267
分享到

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

2023-06-04 08:06:12 267人浏览 八月长安
摘要

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

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

环境

python2.7.5

# https server 生成证书

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

# HTTPSConnection

key        # https server使用的key

ca_certs # https server使用的ca

cert        # 在 浏览器下载的证书, windows下载后linux可以使用

### https.py

import urllib2, httplib, ssl, Socket

DEFAULT_HTTP_TIMEOUT = 10 #seconds

# http://code.activestate.com/recipes/577548-https-httplib-client-connection-with-certificate-v/

# http://stackoverflow.com/questions/1875052/using-paired-certificates-with-urllib2

class HTTPSClientAuthHandler(urllib2.HTTPSHandler):

    '''

    Allows sending a client certificate with the HTTPS connection.

    This version also validates the peer (server) certificate since, well...

    WTF IS THE POINT OF SSL IF YOU DON"T AUTHENTICATE THE PERSON YOU"RE TALKING TO!??!

    '''

    def __init__(self, key=None, cert=None, ca_certs=None, ssl_version=None, ciphers=None):

        urllib2.HTTPSHandler.__init__(self)

        self.key = key

        self.cert = cert

        self.ca_certs = ca_certs

        self.ssl_version = ssl_version

        self.ciphers = ciphers

    def https_open(self, req):

        # Rather than pass in a reference to a connection class, we pass in

        # a reference to a function which, for all intents and purposes,

        # will behave as a constructor

        return self.do_open(self.get_connection, req)

    def get_connection(self, host, timeout=DEFAULT_HTTP_TIMEOUT):

        return HTTPSConnection( host, 

                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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎样用原生的urllib2+httplib请求Https

本文链接: https://lsjlt.com/news/237003.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样用原生的urllib2+httplib请求Https
    本篇文章给大家分享的是有关怎样用原生的urllib2+httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。环境python2.7.5# https ser...
    99+
    2023-06-04
  • Jquery怎么使用原生AJAX方法请求数据
    这篇文章主要介绍“Jquery怎么使用原生AJAX方法请求数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Jquery怎么使用原生AJAX方法请求数据”文章能帮助大家解决问题。1.原生ajax1....
    99+
    2023-07-05
  • js中的原生网络请求解读
    目录一. XMLHttpRequer 对象1. 使用 XHR2. HTTP 头部3. GET 请求4. POST 请求5. XMLHttpRequest 标准2二. 进度事件1. l...
    99+
    2022-12-03
    js原生网络请求 js网络请求 js原生请求
  • nodejs如何实现原生的HTTP请求
    这篇文章主要介绍“nodejs如何实现原生的HTTP请求”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现原生的HTTP请求”文章能帮助大家解决问题。第一部分:创建一个HTTP请求在...
    99+
    2023-07-05
  • Jquery使用原生AJAX方法请求数据
    目录1.原生ajax1.具体步骤2.get请求3.post请求4.封装方法2.jquery的ajax方法1.原生ajax 1.具体步骤 1.创建XMLHTTPRequest对象 2....
    99+
    2023-02-22
    Jquery AJAX请求数据 Jquery AJAX方法
  • 如何实现JavaScript原生封装ajax请求和Jquery中的ajax请求
    小编给大家分享一下如何实现JavaScript原生封装ajax请求和Jquery中的ajax请求,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、原生ajax(1)html前端代码get请...
    99+
    2024-04-02
  • vue网络请求方案原生网络请求和js网络请求库的示例分析
    这篇文章主要介绍vue网络请求方案原生网络请求和js网络请求库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 原生网络请求1. XMLHttpRequest(w3c标准)  &nbs...
    99+
    2023-06-21
  • 原生js+jquery+ajax请求以及jsonp如何调用
    这篇文章主要为大家展示了“原生js+jquery+ajax请求以及jsonp如何调用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“原生js+jquery+aja...
    99+
    2024-04-02
  • Go语言中怎么使用HTTPS协议进行请求
    这篇文章主要介绍“Go语言中怎么使用HTTPS协议进行请求”,在日常操作中,相信很多人在Go语言中怎么使用HTTPS协议进行请求问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中怎么使用HTTPS协议进...
    99+
    2023-07-06
  • 原生js XMLhttprequest请求onreadystatechange执行两次的解决
    目录原生js XMLhttprequest请求onreadychange执行两次关于readyState不同状态总结(0) 未初始化(1) 载入(2) 载入完成(3) 交互(4) 完...
    99+
    2023-02-23
    js XMLhttprequest onreadystatechange 原生js XMLhttprequest请求 onreadystatechange执行两次
  • Android如何使用OkHttp请求自签名的https网站
    这篇文章将为大家详细讲解有关Android如何使用OkHttp请求自签名的https网站,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。很多公司考虑到安全问题,项目中都采用https加密协议进行数据传输。但...
    99+
    2023-05-30
    android https
  • Nginx请求处理流程是怎样的
    这篇文章主要介绍“Nginx请求处理流程是怎样的”,在日常操作中,相信很多人在Nginx请求处理流程是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx请求处理流程是怎样的”的疑惑有所帮助!接下来...
    99+
    2023-06-04
  • js原生小程序怎么封装请求优雅地调用接口
    本篇内容介绍了“js原生小程序怎么封装请求优雅地调用接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基于小程序原生request封装Pro...
    99+
    2023-06-21
  • ASP.NET的请求处理过程是怎样的
    这篇文章主要介绍“ASP.NET的请求处理过程是怎样的”,在日常操作中,相信很多人在ASP.NET的请求处理过程是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET的请求处理过程是怎样的”的疑...
    99+
    2023-06-17
  • 完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
    只要调用了没有受信的https就会报错:CERT_UNTRUSTED 简单的解决方法就是设置环境变量回避非授信证书的问题。 只要在请求的代码之前加上如下代码即可: process.env.NODE_TLS_...
    99+
    2022-06-04
    完美 node js
  • Flutter 将Dio请求转发原生网络库的实现方案
    目录背景实现方案实现步骤交互协议注意点背景 首先看到标题,相信大家已经血压飙升了,既然都用了Flutter,怎么还用原生的网络库呢?这不是多此一举么。emmmmm,当我看到这个需求的...
    99+
    2024-04-02
  • ASP.NET对请求处理过程的操作是怎样的
    本篇内容介绍了“ASP.NET对请求处理过程的操作是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当请求一个*.aspx文件的时候,这...
    99+
    2023-06-17
  • 如何使用Python生成HTTP请求的二维码?
    随着互联网的快速发展,HTTP请求已经成为了现代Web应用程序的核心。而二维码则是一种方便快捷的信息传递方式。如果将这两种技术结合起来,就可以实现通过扫描二维码来发起HTTP请求的功能。本文将介绍如何使用Python生成HTTP请求的二维码...
    99+
    2023-09-21
    http 二维码 并发
  • 简单实用的原生PHP分页类是怎样的
    本篇文章为大家展示了简单实用的原生PHP分页类是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一款简单实用的原生PHP分页类,分页按钮样式简洁美观,页码多的时候显示“...”,也是挺多网站用的...
    99+
    2023-06-04
  • python selenium禁止加载某些请求的实现是怎样的
    这篇文章给大家介绍python selenium禁止加载某些请求的实现是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。问题描述通过selenium请求目标网站时候, 真实数据(我这里是验证码图片)已经加...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作