我在Postman中使用以下过滤器在Web API中发出POST请求,但无法在Python中通过请求库发出简单的POST请求。
首先
,我要向该URL发送POST请求(http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets),并将Postman中的以下过滤器应用于正文,并将原始过滤器和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"
}
}
在存储数据的数据库是卡桑德拉,并根据以下链接卡桑德拉不等于操作,卡桑德拉OR操作,
卡桑德拉秩序之间通过运营商,卡桑德拉不支持 不等于 , OR , BETWEEN 运营商,所以我没办法可以使用这些运算符过滤URL,但
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次,这让我不足为奇发现为什么我们得到延迟…
我的问题是如何解决请求库的问题?我正在使用以下链接“请求库”文档作为教程来使其工作,但是似乎未读取我的有效负载。
您的邮递员请求是JSON正文。只需在Python中复制相同的主体即可。您的Python代码没有发送JSON,也没有发送与Postman示例相同的数据。
对于初学者,通过data
参数发送字典会将字典编码为application/x-www-form- urlencoded
表单,而不是JSON。其次,您似乎正在发送单个过滤器。
以下代码完全复制了您的Postman帖子:
import requests
filters = {"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"
}}
url = "http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets"
response = requests.post(url, json=filters)
请注意,这里filters
是一个 Python 数据结构,并将其传递给json
关键字参数。使用后者有两件事:
Content-Type
标头设置为application/json
(JSON
在选择raw
正文后,通过在下拉菜单中选择选项,就像在Postman配置中所做的那样)。requests
否则 只是一个HTTP API
,它不能使Cassandra做到比其他任何HTTP库更多的功能。该urllib.request.urlopen
代码发送GET
请求,并通过以下内容平凡地翻译为requests
:
def get_json():
url = "http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets"
response = requests.get(url, params={'user_name': user}, timeout=15)
return response.json()
我删除了if
分支,并使用params
参数将其替换,该参数将键-值对的字典转换为正确编码的URL查询(将用户名作为user_name
键传递)。
注意json()
响应中的呼叫;这负责解码从服务器返回的JSON数据。这仍然需要很长时间,您在这里没有过多地过滤Cassandra数据。
问题内容: 我读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供用于编写内容的输入流,并且不知道(或不在乎)内容的格式。 现在,我想用名称和密码的参数对URL进行常规发布。 这意味着我需要自己将名称和值对编码为流? 问题答案: 当前接受的答案已过期。现在,如果您想创建一个发布请求并向其中添加参数,则应该使用Mul
问题内容: 我需要将JSON从客户端发布到服务器。我正在使用Python 2.7.1和simplejson。客户端正在使用请求。服务器是CherryPy。我可以从服务器获取硬编码的JSON(代码未显示),但是当我尝试将JSON POST到服务器时,出现“ 400 Bad Request”。 这是我的客户代码: 这是服务器代码。 有任何想法吗? 问题答案: 从Requests 2.4.2及更高版本开
问题内容: 我想使用wget将图片(使用身份验证令牌“ AUTH_1624582364932749DFHDD”)上传到远程服务器到“ test”文件夹。 该命令不起作用(授权失败),我想确保它与语法无关: 有什么建议么? 问题答案: Wget当前仅支持x-www-form-urlencoded数据。不是用于将文件作为表单附件传输,而是需要格式为的数据。 并以相同的方式工作:唯一的不同是,您可以在命
我正在尝试从一个简单的Java项目创建一个HTTP POST请求。 我需要通过两个请求保留会话和cookie,所以我选择了Apache HttpClient。 代码编译时没有错误,也没有运行,但返回的内容长度为零,我不明白为什么。 结果是: 更新:我发现响应状态是302(已找到),当我从邮递员那里做同样的请求时,它是200(OK)。 任何人都可以告诉我我的代码有什么问题吗? 谢谢
问题内容: 是否可以使用Python的库发送SOAP请求? 问题答案: 确实有可能。 这是一个使用普通请求lib调用Weather SOAP Service的示例: 一些注意事项: 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。可能是更 正确 使用的标头(但weatherservice更喜欢 这将以xml字符串形式返回响应-然后,您需要解析该xml。 为简单起见,我以纯文本形式包含了该
我阅读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供了一个用于写入内容的输入流,而不知道(或关心)该内容是什么格式。 现在我想用name和password参数对URL做一个普通的post。 这意味着我需要自己将名称和值对编码成流?
问题内容: 我有类似以下内容: 它不断返回500。服务提供商说我需要发送JSON。Apache HttpClient 3.1+如何完成? 问题答案: Apache HttpClient对JSON一无所知,因此您需要分别构造JSON。为此,我建议从json.org检出简单的JSON- java 库。(如果“ JSON- java”不适合您,则json.org列出了大量可用不同语言提供的库。) 生成J
问题内容: 我需要做一些跨站点脚本编写。下面的代码块包含jsonp方法,该方法好像失败了一样返回,但是当我将其更改为get请求时,我就成功了。我需要能够使用jsonp方法获得成功的响应。可以排除以下情况。响应是有效的json,此参数位于url?callback= JSON_CALLBACK中。这是我通过执行http请求和执行此代码的代码块收到的json。 http响应状态码200 代码块 请注意,