Pythonでcurlコマンドと同等の処理を実行する方法
Pythonでcurlコマンドと同等の処理を実行する方法をご紹介します。
目次
条件
- Python 3.6.8
Pythonのrequests
Pythonではrequestsによって、curlコマンドと同等の処理を実行することが出来ます。
例
curlコマンド例
$ curl -i -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}' \
https://identity.tyo2.conoha.io/v2.0/tokens
$ curl -i -X POST \
-H "Accept: application/json" \
-d '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}' \
https://identity.tyo2.conoha.io/v2.0/tokens
$ curl -i -X POST \ -H "Accept: application/json" \ -d '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}' \ https://identity.tyo2.conoha.io/v2.0/tokens
Pythonのの場合
import requests
headers = {
'Accept': 'application/json',
}
data = '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}'
response = requests.post('https://identity.tyo2.conoha.io/v2.0/tokens', headers=headers, data=data)
print(response.text)
import requests
headers = {
'Accept': 'application/json',
}
data = '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}'
response = requests.post('https://identity.tyo2.conoha.io/v2.0/tokens', headers=headers, data=data)
print(response.text)
import requests headers = { 'Accept': 'application/json', } data = '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}' response = requests.post('https://identity.tyo2.conoha.io/v2.0/tokens', headers=headers, data=data) print(response.text)
curlコマンドからPythonソースへの変換
以下のサイトを利用することで、curlコマンドからPythonソースへ簡単に変換することが出来ます。
レスポンスを見やすくする
以下のようなレスポンスで、「token」の部分を抜き出すことを考えます。
{"access":{"token":{"issued_at":"2019-08-30T05:03:56.516961","expires":"2019-08-31T05:03:56Z","id":"cXXXXXXXXXXXXXXXXXXXXXXXXXXXX","tenant":{"domain_id":"gnc","description":"v2","enabled":true,"id":"YYYYYYYYYYYYYYYYYYYYYYYYY","name":"gnct000000000"},"audit_ids":["ZZZZZZZZZZZZZZZZZZZ"]},"serviceCatalog":[{"endpoints":[{"region":"tyo2","publicURL":…
{"access":{"token":{"issued_at":"2019-08-30T05:03:56.516961","expires":"2019-08-31T05:03:56Z","id":"cXXXXXXXXXXXXXXXXXXXXXXXXXXXX","tenant":{"domain_id":"gnc","description":"v2","enabled":true,"id":"YYYYYYYYYYYYYYYYYYYYYYYYY","name":"gnct000000000"},"audit_ids":["ZZZZZZZZZZZZZZZZZZZ"]},"serviceCatalog":[{"endpoints":[{"region":"tyo2","publicURL":…
{"access":{"token":{"issued_at":"2019-08-30T05:03:56.516961","expires":"2019-08-31T05:03:56Z","id":"cXXXXXXXXXXXXXXXXXXXXXXXXXXXX","tenant":{"domain_id":"gnc","description":"v2","enabled":true,"id":"YYYYYYYYYYYYYYYYYYYYYYYYY","name":"gnct000000000"},"audit_ids":["ZZZZZZZZZZZZZZZZZZZ"]},"serviceCatalog":[{"endpoints":[{"region":"tyo2","publicURL":…
Pythonソースの例
response.json()とすることで、辞書形式に変換します。
import requests
import json
headers = {
'Accept': 'application/json',
}
data = '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}'
response = requests.post('https://identity.tyo2.conoha.io/v2.0/tokens', headers=headers, data=data)
data = response.json()
print(json.dumps(data["access"]["token"], indent=4))
import requests
import json
headers = {
'Accept': 'application/json',
}
data = '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}'
response = requests.post('https://identity.tyo2.conoha.io/v2.0/tokens', headers=headers, data=data)
data = response.json()
print(json.dumps(data["access"]["token"], indent=4))
import requests import json headers = { 'Accept': 'application/json', } data = '{"auth":{"passwordCredentials":{"username":"useruser","password":"passpasspass"},"tenantId":"123456789123456789"}}' response = requests.post('https://identity.tyo2.conoha.io/v2.0/tokens', headers=headers, data=data) data = response.json() print(json.dumps(data["access"]["token"], indent=4))
実行結果
以下のように、必要な情報のみを見やすい形式で出力することが出来ます。
{
"issued_at": "2019-08-30T05:03:56.516961",
"expires": "2019-08-31T05:03:56Z",
"id": "cXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"tenant": {
"domain_id": "gnc",
"description": "v2",
"enabled": true,
"id": "YYYYYYYYYYYYYYYYYYYYYYYYY",
"name": "gnct000000000"
},
"audit_ids": [
"ZZZZZZZZZZZZZZZZZZZ"
]
}
{
"issued_at": "2019-08-30T05:03:56.516961",
"expires": "2019-08-31T05:03:56Z",
"id": "cXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"tenant": {
"domain_id": "gnc",
"description": "v2",
"enabled": true,
"id": "YYYYYYYYYYYYYYYYYYYYYYYYY",
"name": "gnct000000000"
},
"audit_ids": [
"ZZZZZZZZZZZZZZZZZZZ"
]
}
{ "issued_at": "2019-08-30T05:03:56.516961", "expires": "2019-08-31T05:03:56Z", "id": "cXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "tenant": { "domain_id": "gnc", "description": "v2", "enabled": true, "id": "YYYYYYYYYYYYYYYYYYYYYYYYY", "name": "gnct000000000" }, "audit_ids": [ "ZZZZZZZZZZZZZZZZZZZ" ] }
参考
Qiita:curlコマンドをPythonやnode.jsのコードに変換する方法
https://qiita.com/tottu22/items/9112d30588f0339faf9b
https://curl.trillworks.com/ はリンク切れしてました。
https://curlconverter.com/ が代わりに使えます。
ご連絡ありがとうございます。
記事を更新いたしました。