requests源码阅读学习笔记
0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情。
1.另一种类的初始化方式
class Request(object):
    """The :class:`Request` object. It carries out all functionality of
    Requests. Recommended interface is with the Requests functions.
    """
    _METHODS = ('GET', 'HEAD', 'PUT', 'POST', 'DELETE')
    def __init__(self):
        self.url = None
        self.headers = dict()
        self.method = None
        self.params = {}
        self.data = {}
        self.response = Response()
        self.auth = None
        self.sent = False
    def __repr__(self):
        try:
            repr = '<Request [%s]>' % (self.method)
        except:
            repr = '<Request object>'
        return repr
    def __setattr__(self, name, value):
        if (name == 'method') and (value):
            if not value in self._METHODS:
                raise InvalidMethod()
        object.__setattr__(self, name, value)
def get(url, params={}, headers={}, auth=None):
    """Sends a GET request. Returns :class:`Response` object.
    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary of GET Parameters to send with the :class:`Request`.
    :param headers: (optional) Dictionary of HTTP Headers to sent with the :class:`Request`.
    :param auth: (optional) AuthObject to enable Basic HTTP Auth.
    """
    r = Request()
    r.method = 'GET'
    r.url = url
    r.params = params
    r.headers = headers
    r.auth = _detect_auth(url, auth)
    r.send()
    return r.response
2.**kwargs:用于大量参数在方法间的传递,不需要自己每次都初始化一个dict用来传参
def get(url, params={}, headers={}, cookies=None, auth=None):
    return request('GET', url, params=params, headers=headers, cookiejar=cookies, auth=auth)
def request(method, url, **kwargs):
    data = kwargs.pop('data', dict()) or kwargs.pop('params', dict())
    r = Request(method=method, url=url, data=data, headers=kwargs.pop('headers', {}),
                cookiejar=kwargs.pop('cookies', None), files=kwargs.pop('files', None),
                auth=kwargs.pop('auth', auth_manager.get_auth(url)))
    r.send()
    return r.response
requests源码阅读学习笔记的更多相关文章
- vnpy源码阅读学习(1):准备工作
		
vnpy源码阅读学习 目标 通过阅读vnpy,学习量化交易系统的一些设计思路和理念. 通过阅读vnpy学习python项目开发的一些技巧和范式 通过vnpy的设计,可以用python复现一个小型简单的 ...
 - JDK源码阅读-------自学笔记(一)(java.lang.Object重写toString源码)
		
一.前景提要 Object类中定义有public String toString()方法,其返回值是 String 类型. 二.默认返回组成 类名+@+16进制的hashcode,当使用打印方法打印的 ...
 - Spring源码阅读学习一
		
昨天抽时间阅读Spring源码,先从spring 4.x的core包开始吧,除了core和util里,首当其冲的就是asm和cglib. 要实现两个类实例之间的字段的复制功能: 多年之前用C#,因为阅 ...
 - zepto 源码 $.contains 学习笔记
		
$.contains(parent,node) 返回值为一个布尔值 ==> boolean parent,node我们需要检查的节点检查父节点是否包含给定的dom节点,如果两者是相同的节点,返 ...
 - c++ stl源码剖析学习笔记(一)uninitialized_copy()函数
		
template <class InputIterator, class ForwardIterator>inline ForwardIterator uninitialized_copy ...
 - vnpy源码阅读学习(5):关于MainEngine的代码阅读
		
关于MainEngine的代码阅读 在入口文件中,我们看到了除了窗体界面的产生,还有关于MainEngine和EventEngin部分.今天来学习下MainEngine的代码. 首先在run代码中,我 ...
 - JDK源码阅读-------自学笔记(五)(浅析数组)
		
一.数组基础 1.定义和特点 数组也可以看做是对象,数组变量属于引用类型,数组中每个元素相当于该队形的成员变量,数组对象存储在堆中. 2.初始化数组 常用类初始化 // 整型初始化 int[] int ...
 - JDK源码阅读-------自学笔记(二十五)(java.util.Vector 自定义讲解)
		
Vector 向量 Vector简述 1).Vector底层是用数组实现的List 2).虽然线程安全,但是效率低,所以并不是安全就是好的 3).底层大量方法添加synchronized同步标记,sy ...
 - Requests 源码阅读笔记
		
models.py class Request(RequestHooksMixin): def __init__(self, method=None, url=None, headers=None, ...
 
随机推荐
- JSON.parse()和JSON.stringify()
			
1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...
 - 常见CSS与HTML使用误区
			
误区一.多div症 <div class="nav"> <ul> <li><a href="/home/"> ...
 - Bootstrap-Select 动态加载数据的小记
			
关于前端框架系列的可以参考我我刚学Bootstrap时候写的LoT.UI http://www.cnblogs.com/dunitian/p/4822808.html#lotui bootstrap- ...
 - 开始学nodejs——net模块
			
net模块的组成部分 详见 http://nodejs.cn/api/net.html 下面整理出了整个net模块的知识结构,和各个事件.方法.属性的用法 net.Server类 net.Socket ...
 - vmware上网的方式
			
vmware上网设置 vmware虚拟机上网设置 我的一些心得,如下: 如何使vmware虚拟机中的操作系统能够上网? 第一种情况: 主机使用PPPOE拨号上网 方法一:NAT方式 1.先关闭虚拟机中 ...
 - AI人工智能系列随笔
			
初探 AI人工智能系列随笔:syntaxnet 初探(1)
 - await and async
			
Most people have already heard about the new “async” and “await” functionality coming in Visual Stud ...
 - android 事件分发机制详解(OnTouchListener,OnClick)
			
昨天做东西做到触摸事件冲突,以前也经常碰到事件冲突,想到要研究一下Android的事件冲突机制,于是从昨天开始到今天整整一天时间都要了解这方面的知识,这才懂了安卓的触摸和点击事件的机制.探究如下: 首 ...
 - spider RPC入门指南
			
本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...
 - 使用apache自带日志分割模块rotatelogs,分割日志
			
rotatelogs 是 Apache 2.2 中自带的管道日志程序,参数如下(参见:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/rotat ...