web-dev-qa-db-ja.com

pythonを使ってcurlコマンドを実行する方法

私はpythonでcurlコマンドを実行したいです。

通常は、ターミナルにコマンドを入力してリターンキーを押すだけです。しかし、私はそれがpythonでどのように機能するのかわかりません。

以下にコマンドを示します。

curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

応答を得るために送信されるrequest.jsonファイルがあります。

私はたくさん調べ、混乱しました。完全に理解することはできませんでしたが、私はコードの一部を書き込もうとしました。うまくいきませんでした。

import pycurl
import StringIO

response = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere')
c.setopt(c.WRITEFUNCTION, response.write)
c.setopt(c.HTTPHEADER, ['Content-Type: application/json','Accept-Charset: UTF-8'])
c.setopt(c.POSTFIELDS, '@request.json')
c.perform()
c.close()
print response.getvalue()
response.close()

エラーメッセージは 'Parse Error'です。誰でも修正方法を教えてもらえますか?またはどのようにサーバーから正しく応答を取得するには?

102
Qiang Fu

わかりやすくするために、 Requests ライブラリを使用することを検討してください。

JSONレスポンスコンテンツの例は次のようになります。

import requests
r = requests.get('https://github.com/timeline.json')
r.json()

さらに詳しい情報を探しているなら、 クイックスタート セクションに、たくさんの実用的な例があります。

編集:

あなたの特定のカール翻訳のために:

import requests
url = 'https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere'
payload = open("request.json")
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, data=payload, headers=headers)
131
otorrillas

このウェブサイトを 使ってください 。 curlコマンドをPython、Node.js、PHP、R、またはGoに変換します。

例:

curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/asdfasdfasdf

Pythonでこれになる、

import requests

headers = {
    'Content-type': 'application/json',
}

data = '{"text":"Hello, World!"}'

response = requests.post('https://hooks.slack.com/services/asdfasdfasdf', headers=headers, data=data)
44
curl -d @request.json --header "Content-Type: application/json" https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere

pythonの実装はこんな感じです

import requests

headers = {
    'Content-Type': 'application/json',
}

params = (
    ('key', 'mykeyhere'),
)

data = open('request.json')
response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search', headers=headers, params=params, data=data)

#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere', headers=headers, data=data)

チェックこのリンクは、cURlコマンドをpython、php、およびphpに変換するのに役立ちます。 nodejs

15
cryptoKTM
import requests
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
data = requests.get(url).json

多分?

ファイルを送信しようとしている場合

files = {'request_file': open('request.json', 'rb')}
r = requests.post(url, files=files)
print r.text, print r.json

ああああ@LukasGrafおかげで私は彼のオリジナルコードが何をしているのか理解しやすくなりました

import requests,json
url = "https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere"
my_json_data = json.load(open("request.json"))
req = requests.post(url,data=my_json_data)
print req.text
print 
print req.json # maybe? 
15
Joran Beasley

あなたのために変換を行うNice Webサイト https://curl.trillworks.com/ があります。 cURLからPython、Node.js、R、PHP、Goに変換します。

8
Edgar Manukyan

私の答えはWRT python 2.6.2です。

import commands

status, output = commands.getstatusoutput("curl -H \"Content-Type:application/json\" -k -u (few other parameters required) -X GET https://example.org -s")

print output

必要なパラメータが提供されていないことをお詫び申し上げます。それは機密事項です。

3
apoorva_bhat
import requests

headers = {
    'Content-Type': 'application/json',
}

params = (
    ('key', 'mykeyhere'),
)

data = open('request.json')
response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search', headers=headers, params=params, data=data)

#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.post('https://www.googleapis.com/qpxExpress/v1/trips/search?key=mykeyhere', headers=headers, data=data)
0
Shafay