我有一个RESTful API,我使用EC2实例上的Elasticsearch实现来公开内容语料库 . 我可以通过从终端(MacOSX)运行以下命令来查询搜索:
curl -XGET 'http://ES_search_demo.com/document/record/_search?pretty=true' -d '{
"query": {
"bool": {
"must": [
{
"text": {
"record.document": "SOME_JOURNAL"
}
},
{
"text": {
"record.articleTitle": "farmers"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}'
如何使用 python/requests
或 python/urllib2
将上述内容转换为API请求(不确定要使用哪一个 - 已使用urllib2,但听到请求更好......)?我是否以 Headers 或其他方式传递?
4 回答
因此,您希望在GET请求的主体中传递数据,最好是在POST调用中执行此操作 . 您可以通过使用两个请求来实现此目的 .
原始请求
使用请求进行示例调用
下面是在python中执行其余api的程序 -
使用requests:
根据您的API返回的响应类型,您可能希望查看
response.text
或response.json()
(或者可能首先检查response.status_code
) . 请参阅快速入门文档here,尤其是this section .使用requests和json使其变得简单 .
调用API
假设API返回JSON,使用
json.loads
函数将JSON对象解析为Python dict循环通过dict提取信息 .
Requests模块为您提供循环成功和失败的有用功能 .
if(Response.ok)
:将帮助您确定您的API调用是否成功(响应代码 - 200)Response.raise_for_status()
将帮助您获取从API返回的http代码 .以下是进行此类API调用的示例代码 . 也可以在github中找到 . 该代码假定API使用摘要式身份验证 . 您可以跳过此操作或使用其他适当的身份验证模块来验证调用API的客户端 .