TIL

Today I Learned. 知ったこと、学んだことを書いていく

requests.apiモジュール - Python

https://github.com/requests/requests/blob/00fd4c8eb4ac0fd7b8f8d76bbf15ab06351c052c/requests/api.py#L16-L58 から重要なところを引っ張ってきた

def request(method, url, **kwargs):
    with sessions.Session() as session:
        return session.request(method=method, url=url, **kwargs)

リクエストを送る前に毎回Sessionを生成しているということ。また、withを使ってるからそのセッションは閉じられている。セッションは必ず閉じないといけない。

使用例

セッションを使うときはrequests.Sessionを使い、セッションを使わないときはrequests.apiを使うみたいな?

import requests


class Requester(object):
    _session = None

    def __init__(self, requests_session=True):
        if requests_session:
            self._session = requests.Session()
        else:
            from requests import api
            self._session = api

    def internal_call(self):
        r = self._session.request('GET', 'http://google.com')
        print(r.status_code)

if __name__ == '__main__':
    requester = Requester(False)
    requester.internal_call()
    requester = Requester()
    requester.internal_call()

実行結果

200
200

参考文献