【问题标题】:How to use special characters (accents) on post requests如何在帖子请求中使用特殊字符(重音)
【发布时间】:2021-11-03 14:45:38
【问题描述】:

我是新来的。

我通过这个post找到了这个论坛,基本上OP和我有同样的问题,但答案对我不起作用。

我想要的是发送一个通过 API 发送 whatsapp 消息的发布请求,但是如果我尝试在字母上使用重音符号,则发送的消息完全被破坏 (see the example here) 带有问题的奇怪菱形标记应该是一个“é”字符。

所以,我的问题是:我怎样才能通过 whatsapp 发送“é”?我是在搞乱编码还是什么?

这是我正在尝试做的代码:

def send_message():
    headers = {
    'Content-Type': 'application/json;charset=utf-8',
    'x-maytapi-key': API_TOKEN,
    }
    url = INSTANCE_URL + "/" + PRODUCT_ID + "/" + PHONE_ID + "/sendMessage"
    data = '{ "message": "Essa mensagem \xe9 um teste, por favor desconsidere", "to_number": "+55XXXXXXXXXXX", "type": "text" }'
    response = requests.post(url, headers=headers, data=data)

上面的代码发送了消息,但它到达了那张图片上看到的(作为奇怪的菱形)

现在这是我在看到开头提到的论坛帖子后所尝试的:

def send_message():
    headers = {
    'Content-Type': 'application/json',
    'x-maytapi-key': API_TOKEN,
    }
    url = INSTANCE_URL + "/" + PRODUCT_ID + "/" + PHONE_ID + "/sendMessage"
    data = '{ "message": "Essa mensagem \xe9 um teste, por favor desconsidere", "to_number": "+55XXXXXXXXX", "type": "text" }'.encode('latin-1')

    response = requests.post(url, headers=headers, data=data)
    print(response.text)

不幸的是,结果是一样的。

【问题讨论】:

  • 如果你使用data参数,你应该先json编码。 response = requests.post(url, headers=headers, data=json.dumps(data))。序列化 python 的基本类型看起来很像 json,所以它有时有效,但有时无效。

标签: python json python-requests character-encoding


【解决方案1】:

您可以在执行请求时尝试使用json= 参数而不是data=。另外,首先尝试删除Content-Type 标头:

def send_message():
    headers = {
        # "Content-Type": "application/json;charset=utf-8",
        "x-maytapi-key": API_TOKEN,
    }
    url = INSTANCE_URL + "/" + PRODUCT_ID + "/" + PHONE_ID + "/sendMessage"
    data = {
        "message": "Essa mensagem é um teste, por favor desconsidere",
        "to_number": "+55XXXXXXXXXXX",
        "type": "text",
    }

    response = requests.post(url, headers=headers, json=data)

【讨论】:

  • 为什么要删除内容类型?
  • @tdelaney requests 应在您指定 json= 参数时自动发送内容类型。
  • 感谢您的回答!不幸的是,当我尝试设置“json=data”时,它返回一个错误:{"success":false,"status":400,"message":"An unknown error accured. Your unique error code: undefined"}
  • 当我删除内容类型时,它会返回:{"success":false,"message":"to_number is missing..!"}
  • 等等!我删除了数据定义上的撇号,它使用你的方法工作。认为将 json 定义为列表而不是字符串更有意义。谢谢!
猜你喜欢
  • 2016-05-25
  • 2021-03-29
  • 2013-09-14
  • 1970-01-01
  • 2020-12-17
  • 2023-03-03
  • 2012-01-16
  • 1970-01-01
  • 2020-04-20
相关资源
最近更新 更多