Python HTTPライブラリ:requests入門

3741 ワード

初認識requestsはネットワークプログラミングにおいて、最も基本的な任務は以下の通りである.
登録要求を送信してデータ解析データを取得します.印刷内容はGitHubを例にとって、まずurllib 2を使うにはどうすればいいですか?物事を簡単にするために、私達はすでに知っていると仮定して、GETは要求します.https://api.kuihua.com/返ってくる内容はJSON形式のデータです.
import urllib2
import json

gh_url  = 'https://api.github.com'
cs_user = 'user'
cs_psw  = 'password'

req = urllib2.Request(gh_url)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, cs_user, cs_psw)

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)

urllib2.install_opener(opener)

handler = urllib2.urlopen(req)

if handler.getcode() == requests.codes.ok:
    text = handler.read()
    d_text = json.loads(text)
    for k, v in d_text.items():
        print k, v
実行が正しい場合、コードは戻ります.
issues_url https://api.github.com/issues
current_user_repositories_url https://api.github.com/user/repos{?type,page,per_page,sort}
rate_limit_url https://api.github.com/rate_limit
repository_url https://api.github.com/repos/{owner}/{repo}
...
user_repositories_url https://api.github.com/users/{user}/repos{?type,page,per_page,sort}
team_url https://api.github.com/teams
同じ効果で、リクエスツライブラリでは下記のコードがあります.
import requests

cs_url  = 'https://api.github.com'
cs_user = 'user'
cs_psw  = 'password'

r = requests.get(cs_url, auth=(cs_user, cs_psw))

if r.status_code == requests.codes.ok
    for k, v in r.json().items():
        print k, v
ほめ言葉はもちろん、ここまで読んだあなたの心の中には「寝床の溝、これがPythonのあるべき姿」しかないはずです.じゃ、次にrequestsにはどのような黒い魔法がありますか?一番オススメなのは、オススメのAnacondaを直接インストールすることです.Anacondaをインストールしたくないなら、pipを使ってインストールすることをお勧めします.コマンドラインで実行するだけです.
pip install requests
基本的な使い方はrequestsの基本的な使い方です.基本的な操作は、あるHTTP方法でリモートサーバに要求を送信するだけです.requestsライブラリはこのようにします.
import requests

cs_url = 'http://httpbin.org'

r = requests.get("%s/%s" % (cs_url, 'get'))
r = requests.post("%s/%s" % (cs_url, 'post'))
r = requests.put("%s/%s" % (cs_url, 'put'))
r = requests.delete("%s/%s" % (cs_url, 'delete'))
r = requests.patch("%s/%s" % (cs_url, 'patch'))
r = requests.options("%s/%s" % (cs_url, 'get'))
文法的に見て、requestsライブラリは非常に自然に設計されています.requests.getとは、GET方式でREQUESTを送信し、Responseクラスの結果を得て、rとして保存することです.
あなたが望むHTTPに関する情報はrの中ですべて取得できます.以下、GET方法を例に挙げて、順次紹介します.
URL参照/取得要求のURL
もしあなたが頻繁にインターネットを利用しているなら、きっと次のようなリンクを見たことがあります.
requestsライブラリによって提供されるHTTP方法は、paramsというパラメータを提供します.このパラメータは、Python辞書を適用して、上記のフォーマットに自動的に書式設定されます.
import requests
cs_url = 'http://www.kuihua.com/s'
param  = {'ie':'utf-8', 'q':'query'}

r = requests.get (cs_url, params = param)
print r.url
実行は以下のとおりですhttps://www.kuihua.com/search?q=hello HTTP状態コード/リダイレクトジャンプ
requestsライブラリで定義されたResponse類は、要求されたHTTP状態コードとリダイレクト状態を簡単に取得することができる.
import requests

cs_url = 'http://www.so.com/s'
param  = {'ie':'utf-8', 'q':'query'}
r = requests.get (cs_url, params = param)
print r.url, r.status_code

cs_url = 'http://www.kuihua.com/s'
r = requests.get (cs_url, params = param)
print r.url, r.status_code, r.history
結果は:
http://www.kuihua.com/s?q=query&ie=utf-8 200
http://www.kuihua.com/s?q=query&ie=utf-8 200 []
requestsはデフォルトで自動的に302ジャンプを処理することを発見しました.ジャンプした要求では、戻るURLとステータスコードはジャンプした後の情報です.historyに限って、Pythonリストでジャンプ状況を記録しました.
多くの場合、自動処理がいいです.しかし、時には私達も片足でページのジャンプ状況を追跡したいです.この場合、リクエストにallow_を追加することができます.redirects=Falseパラメータです.