pythonfurl库有没有一种方法可以在没有url编码的情况下向url添加参数?

2024-04-25 22:05:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个url,我需要添加一个api密钥作为参数。密钥中有%和其他字符,不应该是url编码的,有没有办法用furl来实现这一点?在

这是我当前的代码:

request_url = furl('http://www.domain.com/service/') \
    .add({
    'format'     : 'json',
    'location'      : address_line_1 + ',' + city + ',' + state,
    'key'           : APP_KEY
}).url

Tags: 代码comapihttpurl编码参数request
1条回答
网友
1楼 · 发布于 2024-04-25 22:05:46

I have a url that I need to add an api key to as a parameter. The key has % and other characters in it and should not be url encoded

那不可能是真的。它必须是URL编码的。否则,您将得到一个无效的URL,或者一个不代表您想要的URL。在

例如,假设键是123%456%789。如果发送http://www.domain.com/service/?format=json&key=123%25456%25789,另一端的web服务将得到123%456%789,这将成功。如果您只发送http://www.domain.com/service/?format=json&key=123%456%789,另一端的web服务将得到123E6x9,这将失败。在

所以,你的例子已经是正确的,你不应该做任何事情。在

如果出于某种原因,你在到达这里之前已经在进行URL编码APP_KEY那么,就不要了。用这样的名称,我猜它是一个常量文本刚刚复制并粘贴到模块中,这意味着你必须手动对其进行URL编码并复制并粘贴结果。别这样,你就没事了。在

如果您得到的APP_KEY是URL编码的形式,那么您总是可以用urlparse.parse_qs,甚至是furl来解码。在

但如果这些都不合理

is there a way to do this with furl?

不。请参阅文档的Encoding部分。furl只对解码的查询字符串名称和值有效。在

但是有一个简单的方法来解决这个问题。URL并不是一件复杂的事情,furl是专门设计来允许您混合和匹配手动和编程创建的位。README中的大多数示例都正好显示了这一点,例如furl('http://www.google.com/?one=1').add({'two':2}).url。因此,如果您已经从某个地方得到了一个预编码的"key=123%25456%25789",那么在将其交给furl之前,只需手动将其粘贴在字符串上:

request_url = furl('http://www.domain.com/service/?key={}'.format(APP_KEY)) \
    .add({
    'format'     : 'json',
    'location'      : address_line_1 + ',' + city + ',' + state,
}).url

哈奇?好吧,是的,因为你在回避furl的编码,但这正是你要问的问题。在

相关问题 更多 >