这里的正确答案是使用 . 构建 URL 的查询字符串部分urllib.urlencode
。例如:
qparams = {
'servername': 'vGames',
'serverpassword': '9929',
'channelname': 'CS.vGames.co.il GatherBot -2-/.Team-',
'channelpassword': '57' }
path = 'ventrilo://91.227.221.73:3824/' + urllib.urlencode(qparams)
如果您从其他地方获得了硬编码的查询字符串,则可以urllib.quote
在其上使用:
qstring = 'servername=vGames&serverpassword=9929&channelname=CS.vGames.co.il GatherBot -2-/.Team-A&channelpassword=57'
path = 'ventrilo://91.227.221.73:3824/' + urllib.quote(qstring)
或者,如果您从其他地方获得了完整的硬编码 URL,则该 URL 应该已经正确编码(使用“%20”表示“”等)。如果您手动编写 URL,您始终可以手动对其进行编码,只需用 %20 替换空格,然后对您注意到的任何其他内容进行编码,直到它起作用……但这通常不是一个很好的工作方式,除了非常快速和肮脏的黑客攻击在口译员周围。
您可以尝试以下操作:使用urlparse.urlparse
它,然后encode
使用quote
查询字符串部分并将其重新组合在一起。但是不能保证它会做正确的事情。你给它垃圾,它不一定知道它是什么垃圾。例如,频道名称中有一个未编码的“/”,所以谁知道它urlparse
会做什么。更不用说你甚至没有'?引入查询字符串。
因此,您可能需要一些自定义代码来解决该问题。
但最好的解决方案是退后一步:无论 URL 来自何处,都一定有人知道什么是路径、什么是查询字符串以及如何连接查询参数等等;捕获当时的知识并将其传递下去,并以正确的方式做事urllib.urlencode
。