次の Curl コマンドを Python に変換する方法を知りたいと思っていました。
curl -G -H "Accept: application/json" ' http://mydomain.com:8080/experimental/events ' --data-urlencode 'query=["=", "certname", "myserver"]'
次の2つのオプションを試しました(1:httlibを使用し、2:urllib2を使用):
オプション 1: httlib を使用する
import httplib, urllib
connection = httplib.HTTPConnection('mydomain.com', 8080)
headers = {'Content-type': 'application/json'}
values = {"query": "['=', 'certname', 'myserver']"}
data = urllib.urlencode(values)
connection.request('POST', '/experimental/events', data, headers)
response = connection.getresponse()
動作していませんが、connection.request('POST', '/facts/myserver', None, headers) などのデータ (urlencode) なしで単純なリクエストを実行すると動作します
注:「/experimental/events」には --data-urlencode が必要ですが、「/facts/myserver」には --data-urlencode は必要ありません
オプション 2: urllib2 を使用する
import urllib2, urllib
values = {"query": "['=', 'certname', 'myserver']"}
data = urllib.urlencode(values)
url_path = "http://mydomain.com:8080/experimental/events"
server_request = urllib2.Request(url_path, data)
server_request.add_header('Content-type', 'Accept: application/json')
server_response = urllib2.urlopen(server_request)
それは機能していませんが、再度、url_path = " http://mydomain.com:8080/facts/myserver " のようなデータ (urlencode) なしで単純なリクエストを実行し、次に server_request = urllib2.Request(url_path)を実行すると機能します。
注:「/experimental/events」には --data-urlencode が必要ですが、「/facts/myserver」には --data-urlencode は必要ありません
私はこの種の --data-urlencode 'query=["=", "certname", "myserver"]' で立ち往生しています
どんな助けでも大歓迎です!