私はR.400の悪い要求を引き起こすhttr :: POSTとは違った処理をするcurlは何ですか?
にMaterials Project web APIからドキュメントをデータを照会しようとしているがcurl
とpython
の両方を使用して行われるクエリの例を提供します。以下のcurl
コマンドをコピーしました。
curl -s --header "X-API-KEY: <YOUR-API-KEY>" \
https://materialsproject.org/rest/v2/query \
-F criteria='{"elements": {"$in": ["Li", "Na", "K"], "$all": ["O"]}, "nelements": 2}' \
-F properties='["formula", "formation_energy_per_atom"]'
httr quickstart guideを読んでから、私がこのクエリを再現することができるはず私には思える:curl
コマンドは、マテリアルプロジェクトデータベースからJSONデータを返しながら、私のR
クエリ、
library(httr)
POST(url = "https://www.materialsproject.org/rest/v2/query",
config = add_headers("X-API-KEY" = "<YOUR-API-KEY>",
body = list(criteria = "{'elements': {'$in': ['Li', 'Na', 'K'], '$all': ['O']}, 'nelements': 2}",
properties = "['formula', 'formation_energy_per_atom']"),
encode = "multipart",
verbose())
しかし、 HTTP/1.1 400 BAD REQUEST
を返します。上のコードでは、httr
とは違ったカールとは何ですか?
私は-v
をカールに置き、それを上記の出力(verbose()
)と比較しようとしましたが、カールはマルチパートのフォームに表示されていません。
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------d2ef2f3982185118
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Date: Tue, 27 Dec 2016 21:18:58 GMT
< Server: Apache/2.2.15 (CentOS)
< Vary: Accept-Encoding,User-Agent
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
一方httr
ショー:
-> Content-Type: multipart/form-data; boundary=----------------------------5b4873dbc9cd
->
<- HTTP/1.1 100 Continue
>> ------------------------------5b4873dbc9cd
>> Content-Disposition: form-data; name="criteria"
>>
>> {'elements': {'$in': ['Li', 'Na', 'K'], '$all': ['O']}, 'nelements': 2}
>> ------------------------------5b4873dbc9cd
>> Content-Disposition: form-data; name="properties"
>>
>> ['formula', 'formation_energy_per_atom']
>> ------------------------------5b4873dbc9cd--