当前位置: 首页 > 知识库问答 >
问题:

param数据的Python请求Post

皮嘉德
2023-03-14

这是对API调用的原始请求:

POST http://192.168.3.45:8080/api/v2/event/log?sessionKey=b299d17b896417a7b18f46544d40adb734240cc2&format=json HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 86
Host: 192.168.3.45:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

{"eventType":"AAS_PORTAL_START","data":{"uid":"hfe3hf45huf33545","aid":"1","vid":"1"}}"""

此请求返回成功(2xx)响应。

现在,我正尝试使用requests发布此请求:

>>> import requests
>>> headers = {'content-type' : 'application/json'}
>>> data ={"eventType":"AAS_PORTAL_START","data{"uid":"hfe3hf45huf33545","aid":"1","vid":"1"}}
>>> url = "http://192.168.3.45:8080/api/v2/event/log?sessionKey=9ebbd0b25760557393a43064a92bae539d962103&format=xml&platformId=1"
>>> requests.post(url,params=data,headers=headers)
<Response [400]>

对我来说一切都很好,我不太确定我发布了什么错误来获得400回复。

共有1个答案

张嘉熙
2023-03-14

params用于get样式的URL参数,data用于post样式的正文信息。在请求中提供这两种类型的信息是完全合法的,您的请求也是这样做的,但是您已经将URL参数编码到URL中了。

不过,您的原始帖子包含JSON数据。requests可以为您处理JSON编码,它还将设置正确的content-type头;您所需要做的就是将要编码为JSON的Python对象传递到JSON关键字参数中。

您还可以拆分URL参数:

params = {'sessionKey': '9ebbd0b25760557393a43064a92bae539d962103', 'format': 'xml', 'platformId': 1}

然后将您的数据发布到:

import requests

url = 'http://192.168.3.45:8080/api/v2/event/log'

data = {"eventType": "AAS_PORTAL_START", "data": {"uid": "hfe3hf45huf33545", "aid": "1", "vid": "1"}}
params = {'sessionKey': '9ebbd0b25760557393a43064a92bae539d962103', 'format': 'xml', 'platformId': 1}

requests.post(url, params=params, json=data)

JSON关键字在requests2.4.2版中是新的;如果仍然必须使用旧版本,请使用JSON模块手动编码JSON,并将编码结果作为data键发布;在这种情况下,您必须显式设置Content-Type头:

import requests
import json

headers = {'content-type': 'application/json'}
url = 'http://192.168.3.45:8080/api/v2/event/log'

data = {"eventType": "AAS_PORTAL_START", "data": {"uid": "hfe3hf45huf33545", "aid": "1", "vid": "1"}}
params = {'sessionKey': '9ebbd0b25760557393a43064a92bae539d962103', 'format': 'xml', 'platformId': 1}

requests.post(url, params=params, data=json.dumps(data), headers=headers)
 类似资料:
  • 本文介绍如何在 Rax 中创建网络请求。大多数前端应用都需要通过 HTTP 协议或 MTOP 协议与后端服务器通讯,例如你可能需要给某个接口发起 POST 请求以提交用户数据,或者可能需要从某个服务器上获取一些静态内容。 HTTP 请求 request 模块已支持多端发送请求,要发起简单的 GET 请求的话,只需简单地将网址作为 url 参数即可。 import request from 'uni

  • 在 Rax 的 Web 应用中,尤其是 SSR 应用中,我们推荐在页面入口组件中定义 getInitialProps 属性,来处理数据请求的工作。这是因为: 一旦代码运行在 Server 端,无法像在 Client 那样,异步获取数据后,再通过 setState 来更新页面 UI。渲染引擎需要预先获取数据,然后执行 render 操作。因此,组件的数据请求必须是可被独立调用的。 基于 getIni

  • 问题内容: 这是对API调用的原始请求: 该请求返回成功(2xx)响应。 现在,我尝试使用发送此请求: 一切对我来说看起来不错,我不太确定自己张贴的错误是什么导致400响应。 问题答案: 用于GET样式的URL参数,用于POST样式的正文信息。在请求中 同时 提供 两种 类型的信息是完全合法的,您的请求也可以这样做,但是您已经将URL参数编码为URL。 您的原始帖子虽然包含 JSON 数据。可以为

  • 原理 对于POST请求的处理,koa2没有封装获取参数的方法,需要通过解析上下文context中的原生node.js请求对象req,将POST表单数据解析成query string(例如:a=1&b=2&c=3),再将query string 解析成JSON格式(例如:{"a":"1", "b":"2", "c":"3"}) 注意:ctx.request是context经过封装的请求对象,ctx.

  • 问题内容: 我已经环顾了几天,无法解决这个问题。基本上,我正在将图像上传到服务器并获得ID作为回报,问题是我无法弄清楚如何提取此ID并将其更改为准备好保存到数据库的String。 程式码 这是我得到的输出 问题答案: 您正在接收JSON;您已经使用该方法将其解码为Python结构: 您可以将其视为任何其他Python列表;内容只是一个字典,因此另一个字典键可以获取值: 当您知道上传了多少张图像时,

  • Fetch 是一个支持下拉刷新及滚动加载的组件。因为这两个操作最终目的都是为了做数据请求,所以取名“Fetch”。 使用 <template> <div class="fetch-demo" style="position:absolute;top:0;left:0;bottom:0;right:0;"> <Fetch @fetch="handleFetch">