【问题标题】:Sending URL inside another URL在另一个 URL 中发送 URL
【发布时间】:2020-01-01 18:59:02
【问题描述】:

所以我正在用 python 构建一个电报机器人,我需要向用户发送一个 URL。我正在使用电报 send_text URL:

https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&parse_mode=Markdown&text={message}

但我正在使用的网址:

https://www.amazon.es/RASPBERRY-Placa-Modelo-SDRAM-1822096/dp/B07TC2BK1X/ref=sr_1_3?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=YJ6X8FN3V801&keywords=raspberry+pi+4&qid=1577853490&sprefix=raspberr%2Caps%2C195&sr=8-3

有一个像& 这样的特殊字符,它会阻止消息与完整的 URL 一起发送。在这个 URL 的情况下,我只收到这个:

https://www.amazon.es/RASPBERRY-Placa-Modelo-SDRAM-1822096/dp/B07TC2BK1X/ref=sr13?mkesES=ÅMÅŽÕÑ

我尝试使用 utf-8 替换 & 之类的字符,但 python 将它们转换回“真实字符”,所以我不得不放弃这个想法。 如果您想查看我在这里尝试的是代码 sn-p:

url = url.replace('&', u"\x26")

那么有什么办法可以解决这个问题吗?

【问题讨论】:

标签: python-3.x url python-requests telegram-bot python-telegram-bot


【解决方案1】:

使用urlencode()对网址进行编码

import requests
import urllib.parse

link = "https://www.amazon.es/RASPBERRY-Placa-Modelo-SDRAM-1822096/dp/B07TC2BK1X/ref=sr_1_3?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=YJ6X8FN3V801&keywords=raspberry+pi+4&qid=1577853490&sprefix=raspberr%2Caps%2C195&sr=8-3"
markdownMsg = "[Click me!](" + urllib.parse.quote(link) + ")"
url = "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<ID>&text=" + markdownMsg + "&parse_mode=MarkDown"

response = requests.request("GET", url, headers={}, data ={})
print(response.text.encode('utf8'))

这也适用于&amp;parse_mode=HTML

htmlMsg = "<a href=\"" + urllib.parse.quote(link) + "\">Click me!</a>"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2014-07-02
    相关资源
    最近更新 更多