Fuggire AMPERSANDS in URL per richieste HTTPClient
-
23-09-2019 - |
Domanda
Quindi ho del codice Java che utilizza Jakarta HttpClient in questo modo:
URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());
Il problema è che se title
Include eventuali amperdi (&), sono considerati delimitatori di parametri e la richiesta diventa incasinata ... e se li sostituisco con l'equivalente escapato all'URL %26
, quindi questo viene a doppio scapo %2526
.
Attualmente sto lavorando intorno a questo, in sostanza riparando il danno in seguito:
URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));
Ma lì ha Essere un modo più bello per farlo, giusto? Si noti che il titolo può contenere qualsiasi numero di caratteri UTF-8 imprevedibili, ecc., Quindi sfuggire a tutto il resto è un requisito.
Soluzione
Ecco qui:
import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());
Dai un'occhiata java.net.urlencoder per maggiori informazioni.
Altri suggerimenti
Perché chiami getScapeDPathQuery () se non vuoi la fuga? Basta decidere chi è la responsabilità ed essere coerente.
Non è possibile acquisire l'output di una sottoprocesso modificando sys.stdout
.Quello che hai catturato sembra essere alcune sequenze di Escape ANSI dal tuo interprete Python interattivo (Ippython?).
Per ottenere l'output di un comando esterno, è necessario utilizzare subprocess.check_output()
:
.
paths = subprocess.check_output(["find", ".", "-name", "foobar.ext"])