HTTPCLIENTリクエストのためにURLでアンパサンドを逃がします
-
23-09-2019 - |
質問
だから私はこのようなJakarta httpclientを使用するいくつかのJavaコードを持っています:
URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());
問題は、その場合です title
AmperSands(&)が含まれています。それらはパラメーター区切り文字と見なされ、リクエストは厄介になります...そして、それらをURLエスケープの同等物に置き換えると %26
, 、それから、これはgetEscapedPathQuery()によってダブルエスケープされます %2526
.
私は現在、基本的に損害を修復することでこれを回避しています。
URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));
しかし、そこに もっている これを行うためのより良い方法になるために、そうですか?タイトルには予測不可能なUTF-8 charなどを任意の数に含めることができるため、他のすべてを逃れることは要件です。
解決
どうぞ:
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());
小切手 java.net.urlencoder 詳細については。
他のヒント
逃げることを望まないのに、なぜGetEScapedPathQuery()に電話しているのですか?それが誰であるかを決定し、一貫性を保つだけです。
sys.stdout
を変更することでサブプロセスの出力をキャプチャすることはできません。あなたが捕獲されたものはあなたの対話型Pythonインタプリタ(ipython?)からいくつかのANSIエスケープシーケンスのようです。
外部コマンドの出力を取得するには、 subprocess.check_output()
:
.
paths = subprocess.check_output(["find", ".", "-name", "foobar.ext"])
この特定のケースでは、通常、外部コマンドをまったく呼び出すことはなく、むしろPythonプロセス内の右からのファイルを見つけるためにos.walk()
を使用します。