ホームページ バックエンド開発 Python チュートリアル Requests ライブラリの高度な使い方の詳細な説明

Requests ライブラリの高度な使い方の詳細な説明

May 09, 2017 pm 03:14 PM
python

Python の標準ライブラリの urllib2 モジュールには、私たちが通常使用する関数のほとんどがすでに含まれていますが、その API は非常に使いにくいです。それはもはや今の時代、そして現代のインターネットには適していません。リクエストの誕生により、私たちはより良い選択肢を得ることができました。この記事では、Python でのサードパーティ ライブラリ Requests ライブラリの高度な使用法を紹介します。

1. Requests ライブラリのインストール

pip パッケージ (Python パッケージ 管理ツール、Baidu かどうかはわかりません) をインストールしている場合は、pip を使用してインストールします。または Python (x, y) や anaconda などの統合環境では、pip を直接使用して Python ライブラリをインストールできます。 Python(x,y)或者anaconda的话,就可以直接使用pip安装Python的库。

$ pip install requests
ログイン後にコピー

安装完成之后,下面来看一下基本的方法:

#get请求方法
 >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
#打印get请求的状态码
 >>> r.status_code
200
#查看请求的数据类型,可以看到是json格式,utf-8编码
 >>> r.headers['content-type']
'application/json; charset=utf8'
 >>> r.encoding
'utf-8'
#打印请求到的内容
 >>> r.text
u'{"type":"User"...'
#输出json格式数据
 >>> r.json()
 {u'private_gists': 419, u'total_private_repos': 77, ...}
ログイン後にコピー

下面看一个小栗子:

#小例子
import requests

r = requests.get('http://www.baidu.com')
print type(r)
print r.status_code
print r.encoding
print r.text
print r.cookies
'''请求了百度的网址,然后打印出了返回结果的类型,状态码,编码方式,Cookies等内容 输出:'''
<class &#39;requests.models.Response&#39;>
200
UTF-8
<RequestsCookieJar[]>
ログイン後にコピー

二、http基本请求

requests库提供了http所有的基本请求方式。例如:

r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options(http://httpbin.org/get)
ログイン後にコピー

基本GET请求

r = requests.get("http://httpbin.org/get")
#如果想要加参数,可以利用 params 参数:
import requests
payload = {&#39;key1&#39;: &#39;value1&#39;, &#39;key2&#39;: &#39;value2&#39;}
r = requests.get("http://httpbin.org/get", params=payload)
print r.url

#输出:http://httpbin.org/get?key2=value2&key1=value1
ログイン後にコピー

如果想请求JSON文件,可以利用 json() 方法解析,例如自己写一个JSON文件命名为a.json,内容如下:

["foo", "bar", {
"foo": "bar"
}]
#利用如下程序请求并解析:
import requests
r = requests.get("a.json")
print r.text
print r.json()
&#39;&#39;&#39;运行结果如下,其中一个是直接输出内容,另外一个方法是利用 json() 方法 解析,感受下它们的不同:&#39;&#39;&#39;
["foo", "bar", {
"foo": "bar"
}]
[u&#39;foo&#39;, u&#39;bar&#39;, {u&#39;foo&#39;: u&#39;bar&#39;}]
ログイン後にコピー

如果想获取来自服务器的原始套接字响应,可以取得 r.raw 。 不过需要在初始请求中设置 stream=True

r = requests.get(&#39;https://github.com/timeline.json&#39;, stream=True)
r.raw
#输出
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
r.raw.read(10)
&#39;\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03&#39;
ログイン後にコピー

这样就获取了网页原始套接字内容。

如果想添加 headers,可以传 headers 参数:

import requests

payload = {&#39;key1&#39;: &#39;value1&#39;, &#39;key2&#39;: &#39;value2&#39;}
headers = {&#39;content-type&#39;: &#39;application/json&#39;}
r = requests.get("http://httpbin.org/get", params=payload, headers=headers)
print r.url
#通过headers参数可以增加请求头中的headers信息
ログイン後にコピー

三、基本POST请求

对于 POST 请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数。

import requests

payload = {&#39;key1&#39;: &#39;value1&#39;, &#39;key2&#39;: &#39;value2&#39;}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text
#运行结果如下:
{
"args": {}, 
"data": "", 
"files": {}, 
"form": {
"key1": "value1", 
"key2": "value2"
}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "23", 
"Content-Type": "application/x-www-form-urlencoded", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}, 
"json": null, 
"url": "http://httpbin.org/post"
}
ログイン後にコピー

可以看到参数传成功了,然后服务器返回了我们传的数据。

有时候我们需要传送的信息不是表单形式的,需要我们传JSON格式的数据过去,所以我们可以用 json.dumps()

import json
import requests

url = &#39;http://httpbin.org/post&#39;
payload = {&#39;some&#39;: &#39;data&#39;}
r = requests.post(url, data=json.dumps(payload))
print r.text

#运行结果:
{
"args": {}, 
"data": "{\"some\": \"data\"}", 
"files": {}, 
"form": {}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "16", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}, 
"json": {
"some": "data"
}, 
"url": "http://httpbin.org/post"
}
ログイン後にコピー

インストールが完了したら、基本的なメソッドを見てみましょう:

#新建一个 test.txt 的文件,内容写上 Hello World!
import requests

url = &#39;http://httpbin.org/post&#39;
files = {&#39;file&#39;: open(&#39;test.txt&#39;, &#39;rb&#39;)}
r = requests.post(url, files=files)
print r.text

{
"args": {}, 
"data": "", 
"files": {
"file": "Hello World!"
}, 
"form": {}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "156", 
"Content-Type": "multipart/form-data; boundary=7d8eb5ff99a04c11bb3e862ce78d7000", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}, 
"json": null, 
"url": "http://httpbin.org/post"
}
ログイン後にコピー

小さな栗を見てみましょう:

with open(&#39;massive-body&#39;) as f:
requests.post(&#39;http://some.url/streamed&#39;, data=f)
ログイン後にコピー

2. http 基本リクエスト

リクエスト ライブラリはすべてを提供します。基本的な http リクエストメソッド。例:

import requests

url = &#39;Example Domain&#39;
r = requests.get(url)
print r.cookies
print r.cookies[&#39;example_cookie_name&#39;]
ログイン後にコピー
基本的な GET リクエスト
import requests

url = &#39;http://httpbin.org/cookies&#39;
cookies = dict(cookies_are=&#39;working&#39;)
r = requests.get(url, cookies=cookies)
print r.text
#输出:
&#39;{"cookies": {"cookies_are": "working"}}&#39;
ログイン後にコピー
JSON ファイルをリクエストする場合は、json() メソッドを使用して解析できます。たとえば、JSON ファイルを自分で作成し、名前を付けます。これは、次の内容の a.json です:
requests.get(‘Build software better, together&#39;, timeout=0.001)
ログイン後にコピー

サーバーから生のソケット応答を取得したい場合は、r.raw を取得できます。 ただし、最初のリクエストでは stream=True を設定する必要があります。

import requests
requests.get(&#39;http://httpbin.org/cookies/set/sessioncookie/123456789&#39;)
r = requests.get("http://httpbin.org/cookies")
print(r.text)
#结果是:
{
"cookies": {}
}
ログイン後にコピー
このようにして、Web ページの元のソケットのコンテンツが取得されます。

ヘッダーを追加したい場合は、headers パラメータを渡すことができます:

import requests

s = requests.Session()
s.get(&#39;http://httpbin.org/cookies/set/sessioncookie/123456789&#39;)
r = s.get("http://httpbin.org/cookies")
print(r.text)
#在这里我们请求了两次,一次是设置 cookies,一次是获得 cookies
{
"cookies": {
"sessioncookie": "123456789"
}
}
ログイン後にコピー

3. 基本的な POST リクエスト

POST リクエストの場合、通常、いくつかのパラメータを追加する必要があります。次に、パラメータを渡す最も基本的な方法として、data パラメータを使用できます。

import requests

s = requests.Session()
s.headers.update({&#39;x-test&#39;: &#39;true&#39;})
r = s.get(&#39;http://httpbin.org/headers&#39;, headers={&#39;x-test2&#39;: &#39;true&#39;})
print r.text
&#39;&#39;&#39;通过 s.headers.update 方法设置了 headers 的变量。然后我们又在请求中 设置了一个 headers,那么会出现什么结果?很简单,两个变量都传送过去了。 运行结果:&#39;&#39;&#39;
{
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1", 
"X-Test": "true", 
"X-Test2": "true"
}
}
ログイン後にコピー

パラメータが正常に渡され、サーバーが渡したデータを返したことがわかります。

送信する必要がある情報がフォームの形式ではない場合、データを JSON 形式で送信する必要があるため、json.dumps() メソッドを使用してフォーム データをシリアル化できます。 。

r = s.get(&#39;http://httpbin.org/headers&#39;, headers={&#39;x-test&#39;: &#39;true&#39;})

#它会覆盖掉全局的配置:
{
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1", 
"X-Test": "true"
}
}
ログイン後にコピー
上記のメソッドを通じて、JSON 形式でデータを POST することができます ファイルをアップロードしたい場合は、file パラメーターを直接使用するだけです:
r = s.get(&#39;http://httpbin.org/headers&#39;, headers={&#39;x-test&#39;: None})
{
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Host": "http://httpbin.org", 
"User-Agent": "python-requests/2.9.1"
}
}
ログイン後にコピー

このようにして、ファイルのアップロードが正常に完了しました。

リクエストはストリーミング アップロードをサポートしているため、最初にメモリに読み込まずに大きなデータ ストリームやファイルを送信できます。ストリーミング アップロードを使用するには、リクエスト本文にクラス ファイル

オブジェクト を指定するだけで済みます。これは非常に便利です:

import requests

r = requests.get(&#39;https://kyfw.12306.cn/otn/&#39;, verify=True)
print r.text
#结果:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
ログイン後にコピー

4. Cookie

応答に Cookie が含まれている場合は、Cookie を使用できます。取得する

変数

:

import requests

r = requests.get(&#39;Build software better, together&#39;, verify=True)
print r.text
ログイン後にコピー

上記のプログラムは単なるサンプルであり、cookie 変数を使用してサイトの cookie を取得できます

さらに、cookie 変数を使用して cookie 情報をサーバーに送信することもできます:

import requests

r = requests.get(&#39;https://kyfw.12306.cn/otn/&#39;, verify=False)
print r.text
ログイン後にコピー
ログイン後にコピー

5. タイムアウト設定

タイムアウト変数を使用して、最大リクエスト時間を設定できます

import requests

proxies = {
"https": "http://41.118.132.69:4433"
}
r = requests.post("http://httpbin.org/post", proxies=proxies)
print r.text
#也可以通过环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理
export HTTP_PROXY="http://10.10.1.10:3128"
export HTTPS_PROXY=http://10.10.1.10:1080
ログイン後にコピー
ログイン後にコピー

注:

タイムアウトは接続プロセスに対してのみ有効であり、レスポンスボディ。

つまり、今回は要求された時間のみを制限します。返されるレスポンスに大量のコンテンツが含まれている場合でも、ダウンロードには時間がかかります。

6. セッションオブジェクト 🎜🎜🎜🎜🎜 上記のリクエストでは、各リクエストは実際には新しいリクエストを開始することと同じです。これは、異なるブラウザを使用して各リクエストを個別に開くことと同じです。つまり、同じ URL が要求された場合でも、セッションは参照されません。例: 🎜rrreee🎜 明らかに、これはセッション内ではないため、Cookie を取得できません。では、一部のサイトで永続的なセッションを維持する必要がある場合はどうすればよいでしょうか。ブラウザを使用して Taobao を閲覧するのと同じように、異なるタブ間を移動すると、実際には長期間のセッションが作成されます。 🎜🎜解決策は次のとおりです: 🎜rrreee🎜は Cookie を正常に取得できることがわかり、これによりセッションが確立されます。 🎜🎜セッションはグローバル変数なので、間違いなくグローバル設定に使用できます。 🎜rrreee🎜 get メソッドで渡されたヘッダーも x-test だったらどうなるでしょうか? 🎜rrreee🎜 グローバル設定に変数を入れたくない場合はどうすればよいですか?簡単です。「なし」に設定するだけです。 🎜rrreee🎜 以上がセッション session の基本的な使い方です。 🎜🎜🎜🎜 7. SSL 証明書の検証 🎜🎜🎜🎜🎜 今では https で始まる Web サイトをどこでも見ることができ、リクエストは Web ブラウザと同じように HTTPS リクエストの SSL 証明書を検証できます。特定のホストの SSL 証明書を確認するには、ver🎜if🎜y パラメーターを使用できます。12306 証明書は少し前まで無効ではなかったので、テストしてみましょう: 🎜rrreee🎜 github の証明書を試してみましょう: 🎜rrreee🎜 さて、通常のリクエスト、内容が多すぎるため、出力は貼り付けません。 🎜

如果我们想跳过刚才 12306 的证书验证,把 verify 设置为 False 即可:

import requests

r = requests.get(&#39;https://kyfw.12306.cn/otn/&#39;, verify=False)
print r.text
ログイン後にコピー
ログイン後にコピー

发现就可以正常请求了。在默认情况下 verify 是 True,所以如果需要的话,需要手动设置下这个变量。

八、代理

如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求。

import requests

proxies = {
"https": "http://41.118.132.69:4433"
}
r = requests.post("http://httpbin.org/post", proxies=proxies)
print r.text
#也可以通过环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理
export HTTP_PROXY="http://10.10.1.10:3128"
export HTTPS_PROXY=http://10.10.1.10:1080
ログイン後にコピー
ログイン後にコピー

总结

【相关推荐】

1. Python免费视频教程

2. Python基础入门教程

3. Python遇见数据采集视频教程

以上がRequests ライブラリの高度な使い方の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

See all articles