【问题标题】:How not to let the call convert %20 to a space between words如何不让调用将 %20 转换为单词之间的空格
【发布时间】:2022-01-14 17:51:38
【问题描述】:

要向 Telegram 发送消息,我使用此模板:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}

urlphoto = f'http://127.0.0.1:0001/Home/Site%20de%20Trabalho%20-%20Home.html'
botalert = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
chatalert = 'yyyyyyyyyyyyyyyy'
urlalert = f"https://api.telegram.org/bot" + botalert + "/sendMessage?text=" + urlphoto + "&chat_id=" + chatalert + "&parse_mode=HTML"
requests.get(urlalert, headers=headers)

但是当发送消息时,那里收到的链接并没有组合在一起,因为%20 被转换为空格:

我应该如何进行才能使链接像这样完美传递:

http://127.0.0.1:0001/Home/Site%20de%20Trabalho%20-%20Home.html

【问题讨论】:

  • 如果这是您的网站,请停止在 URL 中使用空格 - 它总是只会造成问题。
  • 如果它将%20 转换为space,那么可以尝试%%20,它可能会将其转换为%20
  • 嗨@furas 这是非常正确的,不幸的是在这种情况下我将无法更改,现在我发现自己遇到了这个问题!
  • 如果我使用urllib.parse.quote(' '),那么它将它转换为%20,如果我使用urllib.parse.quote('%20'),那么它将它转换为%2520——所以也许你应该使用%2520代替@ 987654335@ 它将unquote 代码%2520%20

标签: python telegram telegram-bot python-telegram-bot


【解决方案1】:

使用参数字典,参数将为您正确编码:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}

urlphoto = f'http://127.0.0.1:0001/Home/Site%20de%20Trabalho%20-%20Home.html'
botalert = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
chatalert = 'yyyyyyyyyyyyyyyy'
urlalert = f'https://api.telegram.org/bot{botalert}/sendMessage'
params = {'text':urlphoto, 'chat_id':chatalert, 'parse_mode':'HTML'}
requests.get(urlalert, headers=headers, params=params)

【讨论】:

    【解决方案2】:

    你可以这样定义 urlphoto:

    urlphoto = f'http://127.0.0.1:0001/Home/Site%20de%20Trabalho%20-%20Home.html'.replace('%20', '%2520')
    

    这将打印百分号,后面有 20。

    【讨论】:

    • 正确的做法不是手动创建参数,而是通过params参数传递参数字典。然后它们将为您正确编码。
    【解决方案3】:

    试试这个:

    import requests
    from requests.utils import quote
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
    
    urlphoto = 'http://127.0.0.1:0001/Home/Site%20de%20Trabalho%20-%20Home.html'
    botalert = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    chatalert = 'yyyyyyyyyyyyyyyy'
    urlalert = f"https://api.telegram.org/bot{botalert}/sendMessage"
    requests.get(urlalert, params=quote(f"?text={urlphoto}&chat_id={chatalert}&parse_mode=HTML"), headers=headers)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多