【发布时间】:2017-12-25 09:05:11
【问题描述】:
我在 Postman 中使用以下过滤器在 Web API 中发出 POST 请求,但我无法在 Python 中使用 requests 库发出简单的 POST 请求。
首先,我正在向该 URL (http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets) 发送一个 POST 请求,其中 Postman 中的以下过滤器应用于正文,并选择了 raw 和 JSON(application/json) 选项。
Filters in Postman
{
"filter": {
"filters": [
{
"field": "RCA_Assigned_Date",
"operator": "gte",
"value": "2017-05-31 00:00:00"
},
{
"field": "RCA_Assigned_Date",
"operator": "lte",
"value": "2017-06-04 00:00:00"
},
{
"field": "T_Subcategory",
"operator": "neq",
"value": "Temporary Degradation"
},
{
"field": "Issue_Status",
"operator": "neq",
"value": "Queued"
}],
"logic": "and"
}
}
存储数据的数据库是Cassandra,根据以下链接Cassandra not equal operator,Cassandra OR operator, Cassandra Between order by operators,Cassandra 不支持 NOT EQUAL TO、OR、BETWEEN 运算符,所以我无法使用除了 AND 之外的这些运算符。
第二,我正在使用以下代码对请求库应用一个简单的过滤器。
import requests
payload = {'field':'T_Subcategory','operator':'neq','value':'Temporary Degradation'}
url = requests.post("http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets",data=payload)
但我得到的是完整的票证数据,而不是只有那些不是临时降级的数据。
第三,系统实际上正在运行,但我们会遇到 2-3 分钟的延迟才能看到数据。逻辑如下:我们有 8 个用户,我们想查看每个用户的所有票证不是临时降级的,然后我们这样做:
def get_json():
if user_name == "user 001":
with urllib.request.urlopen(
"http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets?user_name=user&001",timeout=15) as url:
complete_data = json.loads(url.read().decode())
elif user_name == "user 002":
with urllib.request.urlopen(
"http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets?user_name=user&002",timeout=15) as url:
complete_data = json.loads(url.read().decode())
return complete_data
def get_tickets_not_temp_degradation(start_date,end_date,complete_):
return Counter([k['user_name'] for k in complete_data if start_date < dateutil.parser.parse(k.get('DateTime')) < end_date and k['T_subcategory'] != 'Temporary Degradation'])
基本上,我们得到了今年和去年的整套票,然后我们让 Python 按用户过滤完整集,到目前为止只有 10 个用户,这意味着这个过程重复了 10 次,让我毫不奇怪地发现为什么我们会延迟......
我的问题是如何解决 requests 库的这个问题?我正在使用以下链接 Requests library documentation 作为教程来使其正常工作,但似乎我的有效负载没有被读取。
【问题讨论】:
-
在使用 JSON 数据时,我很幸运使用
json关键字 arg 代替了data。 -
用
json=payload替换data=payload -
我没有运气将 data=payload 更改为 json=payload :(
-
那么 Postman 查询是否有效 还是无效?
-
您的问题也令人困惑。如果 cassandra 不支持某些过滤器操作,那么这不是
requests限制。您只能发送 cassandra 支持的查询,仅此而已。
标签: python json django python-3.x cassandra