python - Strawpoll.me API 对于我的 Python 程序返回 "400 Bad Request",但可以在终端上运行

标签 python json python-3.x rest aiohttp

我有以下Python程序来使用strawpoll.me的API创建strawpolls,如here.所述

import aiohttp
import asyncio

async def createPoll():
    question = "Is this thing on?"
    options = ["Yes", "No", "Maybe"]

    try:
        async with aiohttp.ClientSession() as session:
            async with session.post(
                "https://www.strawpoll.me/api/v2/polls",
                json={
                    "title": question,
                    "options": options,
                    "multi": "false"
                },
                headers={"Content Type": "application/json"}
            ) as response:
                print(response)
                json = await response.json()
                strawpoll_id = json["id"]
            print(f"https://strawpoll.me/{strawpoll_id}")
    except Exception as e:
        print(e)

if __name__ == '__main__':
    asyncio.run(createPoll())

这曾经有效,但现在不再有效。我想知道发生了什么变化。这是我现在得到的:

<ClientResponse(https://www.strawpoll.me/api/v2/polls) [400 Bad Request]>
<CIMultiDictProxy('Connection': 'close', 'Content-Length': '0')>

0, message='Attempt to decode JSON with unexpected mimetype: '
>>> 

如果我将相同的参数发送到终端中的端点,如下所示:

curl -H "Content-Type: application/json"-X POST -d '{"title": "这是打开的吗?", "options": ["Yes", "No", “也许”],“多”:“假”}' https://www.strawpoll.me/api/v2/polls

我得到了预期的响应。

最佳答案

我尝试过:


async def createPoll():
    question = "Is this thing on?"
    options = ["Yes", "No", "Maybe"]

    try:
        async with aiohttp.ClientSession() as session:
            print('HERE')
            async with session.post(
                "https://www.strawpoll.me/api/v2/polls",
                json={
                    "title": question,
                    "options": options,
                    "multi": "false"
                },
                headers={"Content-Type": "application/json"}
            ) as response:
                print(response)
                json = await response.json()
                strawpoll_id = json["id"]
            print(f"https://strawpoll.me/{strawpoll_id}")
    except Exception as e:
        print(e)

我唯一更改的是将 Content Type 更改为 Content-Type 以及我得到的输出:

<ClientResponse(https://www.strawpoll.me/api/v2/polls) [200 OK]>
<CIMultiDictProxy('Access-Control-Allow-Headers': 'X-Requested-With', 'Access-Control-Allow-Origin': '*', 'Cache-Control': 'private, no-cache="set-cookie"', 'Content-Type': 'application/json; charset=utf-8', 'Server': 'Microsoft-IIS/10.0', 'Set-Cookie': 'AWSELB=193D972F16169235196B775BF1B5BFF2D266A3E7F134840A661FD488EC125877D4193B20C4FCDBDB753E1C0E576E03398F3B7AAE5AAC9D70BFE31DB4F45EABEEB6F46BFBEE;PATH=/;MAX-AGE=3600', 'Set-Cookie': 'AWSELBCORS=193D972F16169235196B775BF1B5BFF2D266A3E7F134840A661FD488EC125877D4193B20C4FCDBDB753E1C0E576E03398F3B7AAE5AAC9D70BFE31DB4F45EABEEB6F46BFBEE;PATH=/;MAX-AGE=3600;SECURE;SAMESITE=None', 'X-AspNet-Version': '4.0.30319', 'X-AspNetMvc-Version': '5.2', 'X-Frame-Options': 'DENY', 'X-UA-Compatible': 'IE=edge,chrome=1', 'Content-Length': '140', 'Accept-Ranges': 'bytes', 'Date': 'Fri, 06 Mar 2020 07:47:42 GMT', 'Via': '1.1 varnish', 'Connection': 'keep-alive', 'X-Served-By': 'cache-hhn4027-HHN', 'X-Cache': 'MISS', 'X-Cache-Hits': '0', 'X-Timer': 'S1583480862.671417,VS0,VE458', 'Set-Cookie': 'Geo={%22region%22:%22HE%22%2C%22country%22:%22DE%22%2C%22continent%22:%22EU%22}; path=/; domain=.strawpoll.me; SameSite=None; Secure;', 'Strict-Transport-Security': 'max-age=300')>

关于python - Strawpoll.me API 对于我的 Python 程序返回 "400 Bad Request",但可以在终端上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60559318/

相关文章:

java - MULE ESB 中的 REST 调用

javascript - JSON 到 HTML 表 JavaScript 不工作

python - 无法返回我想要的列表

python - jinja 2 库中的语法错误

python - python中的生成器错误

python - 如何估计密度函数并计算其峰值?

python - 如何计算 Python 中 2 个等高线之间的面积?

python - 如何在pygame中制作波浪计时器

python - 有没有办法隔离字符串的各个部分?

java - 使用 JACKSON ObjectMapper 后从 POJO 获取空值