美文网首页
requests 库源码阅读

requests 库源码阅读

作者: clever哲思 | 来源:发表于2019-11-01 11:51 被阅读0次
  • Python 通过调用 warnings 模块中定义的 warn() 函数来发出警告。警告消息通常用于提示用户一些错误或者过时的用法,当这些情况发生时我们不希望抛出异常或者直接退出程序。警告消息通常写入 sys.stderr,对警告的处理方式可以灵活的更改,例如忽略或者转变为为异常。警告的处理可以根据警告类别,警告消息的文本和发出警告消息的源位置而变化。对相同源位置的特定警告的重复通常被抑制。
  • Mixin,表示混入(mix-in),它告诉别人,这个类是作为功能添加到子类中
    1. 首先它必须表示某一种功能,而不是某个物品,如同Java中的Runnable,Callable等
    2. 其次它必须责任单一,如果有多个功能,那就写多个Mixin类
    3. 然后,它不依赖于子类的实现
    4. 最后,子类即便没有继承这个Mixin类,也照样可以工作,就是缺少了某个功能。
  • isinstance(data, (str, bytes)), 可以用一个元祖将可能的类型包裹起来
# 重载 isinstance 的写法
In [21]: class M(type):
    ...:     def __instancecheck__(cls, instance):
    ...:         print(1111)
    ...:
In [22]: class C(metaclass=M):
    ...:     pass
    ...:
In [23]: isinstance('a', C)
1111
Out[23]: False
  • idea 一个做国际化域名的包
  • PreparedRequest的prepare_body会检测是否是json,如果是,设置content_type = 'application/json' 源代码如下
 def prepare_body(self, data, files, json=None):
        """Prepares the given HTTP body data."""

        # Check if file, fo, generator, iterator.
        # If not, run through normal process.

        # Nottin' on you.
        body = None
        content_type = None

        if not data and json is not None:
            # urllib3 requires a bytes-like body. Python 2's json.dumps
            # provides this natively, but Python 3 gives a Unicode string.
            content_type = 'application/json'
            body = complexjson.dumps(json)
            if not isinstance(body, bytes):
                body = body.encode('utf-8')
  • namedtuple(具名元组)
import collections

# 两种方法来给 namedtuple 定义方法名
#User = collections.namedtuple('User', ['name', 'age', 'id'])
User = collections.namedtuple('User', 'name age id')
user = User('tester', '22', '464643123')

print(user)
  • HTTPHeaderDict 是一个自定义的字典,继承了MutableMapping类, 关键函数定义如下,效果如下
>>> headers = HTTPHeaderDict(foo='bar')
>>> headers.add('Foo', 'baz')
>>> headers['foo']
'bar, baz'
class HTTPHeaderDict(MutableMapping):
    def __init__(self, headers=None, **kwargs):
        super(HTTPHeaderDict, self).__init__()
        self._container = OrderedDict()
        if headers is not None:
            if isinstance(headers, HTTPHeaderDict):
                self._copy_from(headers)
            else:
                self.extend(headers)
        if kwargs:
            self.extend(kwargs)

    def __setitem__(self, key, val):
        self._container[key.lower()] = [key, val]
        return self._container[key.lower()]

    def __getitem__(self, key):
        val = self._container[key.lower()]
        return ', '.join(val[1:])

    def add(self, key, val):
        key_lower = key.lower()
        new_vals = [key, val]
        # Keep the common case aka no item present as fast as possible
        vals = self._container.setdefault(key_lower, new_vals)
        if new_vals is not vals:
            vals.append(val)
  • 赫夫曼树,别名“哈夫曼树”、“最优树”以及“最优二叉树”。

相关文章

  • requests 库源码阅读

    Python 通过调用 warnings 模块中定义的 warn() 函数来发出警告。警告消息通常用于提示用户一些...

  • python requests库源码阅读

    python requests库提供了丰富便捷的http接口,属于python中最常用的第三方库之一。之前用req...

  • 如何阅读源代码(以 Python requests 库为例)

    如何阅读源代码(以 Python requests 库为例) 对任何一位刚开始阅读源码的工程师来说,学会循序渐进,...

  • Requests源码阅读

    库结构 整体结构 这是我第一次看源码,版本为requests-2.18.4.说实话很吃力,有这几个原因 英文水平不...

  • Requests源码阅读

    很久之前阅读的,差点忘了 一、_Requests模块的作用 刚开始看时,不太注意注释里面的英文,然后就看它作用是继...

  • Python学习之使用Beautiful Soup解析网页(简析

    通过requests库已经可以抓到网页源码,接下来要从源码中找到并提取数据。BeautifulSoup是pytho...

  • etcd-raft 库源码阅读【WIP】

    Etcd 源码阅读 本文是 etcd-raft 库源码的阅读笔记。希望通过阅读 etcd-raft 库的源码,学习...

  • 入门级爬虫

    Requests库入门我的个人博客 requests Requests库的7个主要方法 Requests库的get...

  • requests源码简略阅读

    背景 requests库号称是为人类设计的HTTP请求库,个人也经常使用这个库,因此对它的源码产生了兴趣,带着这个...

  • python简单爬虫示例

    源码 知识点 1.requests库:发送网络请求2.lxml库:HTML和XML的解析3.xpath:XML 文...

网友评论

      本文标题:requests 库源码阅读

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