15
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonのHTTPクライアントライブラリ調査

Posted at

PythonのHTTPクライアントなライブラリはいくつかあったが、どれがよさそうかを自分なりに決めたかった時のメモ。使い勝手は書いていない。

TL;DR (選び方)

調べた後で awasome-pythonを見ればよいと気が付いたので途中で投げた。

  • HTTP1.1のリクエストを楽に送りたい、情報が豊富なのを選びたい→ requests
  • HTTP2とか非同期IOとかほしい→ httpx
  • libcurl好き、速度重視→ PycURL
  • 依存嫌い、インターネットがなく外部ライブラリの利用が困難なのにHTTPクライアントを必要とする残念な環境な場合→ urllib

requestsはどこでもおススメに上がっているぐらい有名で、公式ドキュメントで言及されるほどなので、requestsが使えるとしばらくは困らないはず。

機能比較

最新バージョンで使えれば o、頑張れば出来る場合は△、できない場合は x にしている。
ドキュメントを斜め読みした程度で実際に使って試したわけではない。依存があったり、バージョンが古いと使えない場合もあるが、そこまでは面倒見切れない

| |urllib|requests|httpx|PycURL|
|---|---|---|---|---|---|
|multipart-form|△|o|o|?|
|非同期API|x|x|o|?|
|TLS v1.3|o|o|o|?|

urllib.request

概要

標準ライブラリ。内部では http.client を使っている。

古くはurllib, urllib2などがあったが、色々あって細分化してurllib.requestsに戻ってきた感じ。

インストール

不要

メモ

urllibは比較的泥臭く書く必要があったり、HTTP特有の機能が使えなかったりと、ほぼbytesでしか扱えないので、bytes/strの意識が必要。

multipartなファイル送信は頑張ればできる。過去に書いている

独自の証明書を扱ったり通信に使うバージョンを選びたい場合、Pythonのsslのドキュメントを確認する。
TLS 1.3はOpenSSL1.1.1以降を導入していれば利用可能だが、SSLContextを使うようなら注意

requests

概要

http.clientのドキュメントでもおすすめされるライブラリ。内部ではurllib3が使われている。

有名なライブラリ。HTTP1.xであればこれでよい。HTTP2とか非同期APIが欲しい場合は他を選ぶ必要がありそう。

他にもrequestsを拡張したライブラリがある。twistedを使いasync/awaitをサポートする requests-threadsや、concurrent.futuresを使ったrequests-futuresなど。

httpx

概要

HTTP2サポートを謳うライブラリ。要Python 3以上。同期・非同期に対応。

2020年にv1.0を出したいらしいが、2020/10/26 時点ではv1.0に到達していない。
2021/04/07 追記: 「2021年にv1.0を出したい」に代わっている。活動はしているようだ。

requestsをインスパイアしているそうでrequestsっぽいAPIになっている。

PycURL

概要

libcurlのpython binding。libcurlに依存。requestsと比べて速いらしい

その他

見つけたがおススメできないそうにないもの。なぜダメかとか。

  • hyper: http2サポートを謳っていたが、最近の活動があまりない。httpxに取って代わられた感がある。
  • http.client(標準ライブラリ): urllib(標準ライブラリ)の内部で使われている。これを扱う人はここを見ないと思う。
  • urllib/urllib2(標準ライブラリだった): 古の産物。urllib.request等に置き換わった。古いコードをメンテナンスする以外で利用する理由はない。
  • urllib3: 標準っぽい名前だがサードパーティライブラリ。requestsでは物足りない場合に検討。
  • urlgrabber: yumで使っていたものをライブラリ化したらしい。内部でPycURLを使っている。インタフェースはurllibと似ている。ミラーサイトを使った取得が行えるurlgrabber.mirrorなど歴史を感じる。今回はご縁が無かった。
15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?