如何使用Python请求库发布帖子请求?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用Python请求库发布帖子请求?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3782字,纯文字阅读大概需要6分钟。
内容图文
![如何使用Python请求库发布帖子请求?](/upload/InfoBanner/zyjiaocheng/701/79cef9bbce5542669493084dfdecb249.jpg)
我在Postman中使用以下过滤器在Web API中发出POST请求,但我无法在Python中使用请求库发出简单的POST请求.
首先,我向此URL发送POST请求(http://10.61.202.98:8081/T/a/api/rows/cat/ect/tickets),Postman中的以下过滤器应用于Body,并选择了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之外,我无法使用这些运算符过滤URL.
其次,我使用以下代码将一个简单的过滤器应用于请求库.
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 library documentation作为教程使其工作但似乎我的有效负载没有被读取.
解决方法:
你的邮递员请求是一个JSON正文.只需在Python中重现相同的主体即可.您的Python代码不发送JSON,也不发送与Postman示例相同的数据.
对于初学者来说,通过数据参数发送字典会将该字典编码为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关键字参数.使用后者有两件事:
>将Python数据结构编码为JSON(生成与原始Postman体值完全相同的JSON值).
>将Content-Type标题设置为application / json(正如您在Postman配置中所做的那样,在为正文选择raw后,在下拉菜单中选择JSON选项).
请求只是一个HTTP API,它不能使Cassandra做任何其他HTTP库. urllib.request.urlopen代码发送GET请求,并简单地转换为请求:
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数据.
内容总结
以上是互联网集市为您收集整理的如何使用Python请求库发布帖子请求?全部内容,希望文章能够帮你解决如何使用Python请求库发布帖子请求?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。