在另一个URL内发送URL

问题描述 投票:0回答:2

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

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

但是我使用的URL:

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将其转换回“真实字符”,因此我不得不放弃这个想法。如果您想查看我在这里尝试的是代码片段:

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

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

python-3.x url python-requests telegram-bot python-telegram-bot
2个回答
0
投票

urlencode()编码URL

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'))

这也适用于&parse_mode=HTML

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

-1
投票

只需在URL前面添加f,例如

url = f'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'

这应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.