Requests モジュールは、ネットワーク アクセスに使用されるモジュールです。実際、urllib、urllib2、httplib、httplib2 など、基本的に同様の機能を提供するモジュールが多数あります。なぜ Requests モジュールが目立つのでしょうか。公式ウェブサイトを開いて見てください。これは「人間」用の http モジュールです。それで、それはどれほど人間的ですか?これまでに urllib などのモジュールを使用したことがある場合は、これが非常に使いやすいことがわかると思います。
ダウンロードが完了したら、モジュールのインポートは非常に簡単です。コードは次のとおりです:
import requests
ここでは、get リクエストまたは post リクエストを送信するための最も一般的な構文をリストします。
r=requests.get("http://php.cn/justTest")
これで、応答オブジェクト r を取得できます。このオブジェクトを使用して、必要な情報を取得できます。
上記の例では、get リクエストにパラメータがありません。リクエストにパラメータが必要な場合はどうなりますか?
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://php.cn/justTest", params=payload)
上記からわかるように、get パラメーターは params キーワード パラメーターとして渡されます。
リクエストされた特定の URL を出力して、それが正しいかどうかを確認できます:
>>>print r.url http://pythontab.com/justTest?key2=value2&key1=value1
正しい URL が実際にアクセスされたことがわかります。
リクエスト パラメータにリストを渡すこともできます:
>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']} >>> r = requests.get("http://php.cn/justTest", params=payload) >>> print r.url http://pythontab.com/justTest?key1=value1&key2=value2&key2=value3
上記は get リクエストの基本形式です。
r = requests.post("http://php.cn/postTest", data = {"key":"value"})
上記からわかるように、投稿リクエストのパラメーターは data キーワード パラメーターとともに渡されます。
現在のデータパラメータは辞書を渡します。次のように、json 形式のデータを渡すこともできます。
>>> import json >>> import requests >>> payload = {"key":"value"} >>> r = requests.post("http://php.cn/postTest", data = json.dumps(payload))
json 形式のデータを送信するのが一般的であるため、json のキーがリクエストの上位バージョンに追加されました。 Word パラメーターを使用すると、json モジュールを使用せずに json データを投稿リクエストに直接送信できます。以下を参照してください:
>>> payload = {"key":"value"} >>> r = requests.post("http://php.cn/postTest", json=payload)
ファイルを投稿したい場合はどうすればよいですか?現時点では、files パラメーターを使用する必要があります:
>>> url = 'http://php.cn/postTest' >>> files = {'file': open('report.xls', 'rb')} >>> r = requests.post(url, files=files) >>> r.text
ファイルを投稿するときにファイル名などの追加情報を指定することもできます:
>>> url = 'http://php.cn/postTest' >>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})} >>> r = requests.post(url, files=files)
ヒント: ファイルを開くにはバイナリ モードを使用することを強くお勧めします。テキストファイル形式で開いた場合、「Content-Length」ヘッダーによりエラーが発生する可能性があります。
ご覧のとおり、リクエストを使用してリクエストを送信するのは簡単です。
リクエストを送信した後に返品情報を取得する方法を見てみましょう。上の例を引き続き使用してみましょう:
>>> import requests >>> r=requests.get('http://php.cn/justTest') >>> r.text
r.text はどのようなエンコード形式で出力されますか?
>>> r.encoding 'utf-8'
utf-8形式で出力されることが分かりました。 r.text の出力形式を変更したい場合はどうすればよいですか?
>>> r.encoding = 'ISO-8859-1'
これにより、出力形式が「ISO-8859-1」に変更されます。
r.contentという出力ステートメントもありますが、これとr.textの違いは何でしょうか? r.content はバイト ストリームを返します。これは、画像アドレスを要求し、画像を保存したい場合に使用できます。コード スニペットは次のとおりです。
def saveImage( imgUrl,imgName ="default.jpg" ): r = requests.get(imgUrl, stream=True) image = r.content destDir="D:\" print("保存图片"+destDir+imgName+"\n") try: with open(destDir+imgName ,"wb") as jpg: jpg.write(image) return except IOError: print("IO Error") return finally: jpg.close
先ほど紹介した r.text は文字列を返します。リクエストに対するレスポンスがjsonになっているのですが、json形式のデータを直接取得することはできますか? r.json() はこれのために用意されています。
r.raw.read() を使用するだけで、サーバーから返された元のデータを取得することもできます。ただし、本当に元の戻りデータを取得したい場合は、リクエスト時に次のように「stream=True」オプションを追加することを忘れないでください:
r = requests.get('https://api.github.com/events', stream=True)。
応答ステータス コードを取得することもできます:
>>> r = requests.get('http://php.cn/justTest') >>> r.status_code 200
リクエストを使用することもできます。 ok は戻り値 200 を指します:
>>> r.status_code == requests.codes.ok True
>>> r= requests.get("http://php.cn/justTest") >>> r.headers
`r.headers` は辞書を返します。例:
{ 'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'connection': 'close', 'server': 'nginx/1.0.4', 'x-runtime': '147ms', 'etag': '"e1ca502697e5c9317743dc078f67693a"', 'content-type': 'application/json' }
判定のためにいくつかの応答ヘッダーを取得するには、次のメソッドを使用します:
r.headers['Content-Type']
または
r.headers.get('Content-Type')
リクエストヘッダー (つまり、サーバーに送信するヘッダー情報) を取得したい場合はどうすればよいでしょうか? r.request.headers を使用して直接取得できます。
同時に、データをリクエストするときにカスタムヘッダー (ヘッダーのキーワードパラメータを介して渡される) を追加することもできます:
>>> headers = {'user-agent': 'myagent'} >>> r= requests.get("http://php.cn/justTest",headers=headers)
5. Cookie について
>>> url = 'http://www.php.cn' >>> r = requests.get(url) >>> r.cookies['example_cookie_name'] 'example_cookie_value'
独自の Cookie を送信することもできます (Cookie キーワード パラメーターを使用):
>>> url = 'http://php.cn/cookies' >>> cookies={'cookies_are':'working'} >>> r = requests.get(url, cookies=cookies)
6. リダイレクトについて
>>> r = requests.get('http://php.cn/') >>> r.url 'http://php.cn/' >>> r.history []
上の例からわかるように、アクセスには http プロトコルを使用しますが、r.url では https プロトコルが出力されます。では、サーバーが http プロトコルを使用することを主張する場合、つまりサーバーが自動的にリダイレクトすることを禁止する場合はどうすればよいでしょうか? allow_redirects パラメータを使用します:
r = requests.get('http://php.cn', allow_redirects=False)
7. リクエスト時間について
requests.get('http://php.cn', timeout=1)
8. プロキシについて
proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get("http://php.cn", proxies=proxies)
我们有时候会有这样的情况,我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:
s=requests.Session() login_data={'form_email':'youremail@example.com','form_password':'yourpassword'} s.post("http://pythontab.com/testLogin",login_data) r = s.get('http://pythontab.com/notification/') print r.text
其中,form_email和form_password是豆瓣登录框的相应元素的name值。
使用Requests模块也可以下载网页,代码如下:
r=requests.get("http://www.php.cn") with open("haha.html","wb") as html: html.write(r.content) html.close()
以上がPythonのRequestsモジュールの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。