【问题标题】:AioHttp: How can I create a data form for an aiohttp postAioHttp:如何为 aiohttp 帖子创建数据表单
【发布时间】:2022-12-15 14:18:15
【问题描述】:

这是我使用请求时数据的样子,它工作正常。

data ={
      "srt": srt,
      "firstname" : firstname,
      "lastname" : lastname,
      "Email" : email,
      "password" : password,
      "promotion" : "true",
      "action" : {"name":"EMAIL_REG_FORM_SUBMIT"},
      "ri" : "NORU",
      "ets" : ets
          }

我正在尝试转换它以便它可以与 aiohttp 一起使用,这就是我所拥有的。我想我因为以下行而出错:"action" : {"name":"EMAIL_REG_FORM_SUBMIT"},

data = aiohttp.FormData()
data.add_field("srt", srt)
data.add_field("firstname", firstname)
data.add_field("lastname", lastname)
data.add_field("Email", email)
data.add_field("password", password)
data.add_field("promotion", 'true')
data.add_field("action", {"name":"EMAIL_REG_FORM_SUBMIT"})
data.add_field("ri", 'NORU')
data.add_field("ets", ets)

如果有人对如何进行这项工作有任何想法,请发表评论。本质上,我需要一个带有会话的异步请求,如果您知道该怎么做,请告诉我。

【问题讨论】:

    标签: python asynchronous session python-requests aiohttp


    【解决方案1】:

    通过简单地将其转换为 JSON 字符串,我能够在字段中提交完整字典:

    data.add_field("action", json.dumps({"name":"EMAIL_REG_FORM_SUBMIT"}))
    

    根据字典中的数据,您可能需要将序列化类添加到 json.dumps 以处理 json.dumps 默认序列化类无法处理的“特殊”数据类型,或者您需要在某些特殊情况下序列化为 JSON格式(例如将带时区的 DateTime 转换为服务器期望的某种特殊文本格式)

    您还可以通过对 add_field 的额外调用来添加文件,将您在表单字段中的文件名称指定为 data.add_field() 调用的 name 字段。

    在幕后,FormData 尝试将所有字段和文件转换为格式正确的 multipart/form-data 有效负载。

    (在与 aiohttp 客户端文档和我向其提交数据的服务器进行了一整天的斗争之后,我发现了其中的大部分内容正在做“不聪明”的事情)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2017-12-26
      • 1970-01-01
      相关资源
      最近更新 更多