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

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)

curlコマンドからPythonソースへの変換

以下のサイトを利用することで、curlコマンドからPythonソースへ簡単に変換することが出来ます。

https://curl.trillworks.com/

レスポンスを見やすくする

以下のようなレスポンスで、「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":…

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))

実行結果

以下のように、必要な情報のみを見やすい形式で出力することが出来ます。

{
    "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

Convert curl syntax to Python, Ansible URI, Node.js, R, PHP, Strest, Go, Dart, JSON, Rust

https://curl.trillworks.com/

requestsモジュールを利用してjson形式でレスポンスを得る

Pythonでcurlコマンドと同等の処理を実行する方法” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です