Ho un URL che ho bisogno di aggiungere una chiave API per come parametro. La chiave contiene% e altri caratteri e non dovrebbe essere codificata come URL
Questo non può essere vero. deve essere codificato con URL. Altrimenti, si finisce con un URL non valido o un URL che non significa quello che volevi.
Ad esempio, supponiamo che la chiave sia 123%456%789
. Se si invia http://www.domain.com/service/?format=json&key=123%25456%25789
, il servizio Web dall'altra parte otterrà 123%456%789
, che avrà esito positivo. Se si invia semplicemente http://www.domain.com/service/?format=json&key=123%456%789
, il servizio Web dall'altra parte otterrà 123E6x9
, che avrà esito negativo.
Quindi, il tuo esempio è già corretto e non dovresti fare nulla.
Se, per qualche motivo, hai già codifica URL APP_KEY
prima di arrivare qui ... beh, non farlo. Con un nome del genere, suppongo che sia un letterale costante appena copiato e incollato nel modulo, il che significa che devi codificarlo manualmente con l'URL e copiare e incollare il risultato. Non farlo e stai bene.
Se hai il APP_KEY
in formato con codifica URL, puoi sempre decodificarlo con, ad esempio, urlparse.parse_qs
o anche con furl
.
Ma se niente di tutto questo sembra ragionevole ...
c'è un modo per fare questo con Furl?
No. Vedere la sezione Encoding dei documenti. furl
funziona solo su decodificato nomi e valori stringa di query.
Ma c'è un modo semplice per aggirare questo. Un URL non è una cosa complicata, e lo furl
è progettato specificamente per permetterti di mischiare e abbinare i bit creati manualmente e programmaticamente. La maggior parte degli esempi nello README mostra esattamente questo, come ad esempio furl('http://www.google.com/?one=1').add({'two':2}).url
. Quindi, se hai già un pre-codificato "key=123%25456%25789"
da qualche parte, basta attaccarlo sulla stringa manualmente prima di darlo ai furl
:
request_url = furl('http://www.domain.com/service/?key={}'.format(APP_KEY)) \
.add({
'format' : 'json',
'location' : address_line_1 + ',' + city + ',' + state,
}).url
Hacky? Beh, sì, nel senso che stai codificando lateralmente con lo furl
, ma questo è esattamente quello che stai chiedendo come fare.
Ma questi caratteri devono essere codificati in URL se si desidera che questo sia un URL valido (e funzionante). Immagina che la tua chiave API sia, ad esempio, '123% 456% 789'. Se usi semplicemente 'http: //www.domain.com/service/? Format = json & location = blah & key = 123% 456% 789', il server vedrà' key = 123E6x9'. – abarnert
Probabilmente non lo stai facendo correttamente. Il motivo per usare una libreria di URL è che la codifica non è qualcosa di cui nemmeno tecnicamente devi essere a conoscenza. –
@ChrisDutrow: Per essere onesti, 'furl' è progettato per permetterti di combinare stringhe di query create manualmente e a livello di programmazione (i loro primi esempi riguardano la creazione di un URL da una stringa che ha già" uno "= 1" sul fine, e quindi aggiungendo 'two = 2' in vari modi diversi). – abarnert