2017-01-26 46 views
7

Jmeterを使用してWebクライアントとサーバーの通信を記録しようとしています。 Jmeterとブラウザがアプリケーションを記録するように設定された後。クライアントからサーバーへのポストリクエストが行われると、次のエラーが発生します。どのように記録されているURLをエンコードするか考えていますか?Jmeter Httpプロキシサーバーがjava.net.URISyntaxExceptionをスローする:インデックスエラーのクエリで無効な文字

java.net.URISyntaxException: Illegal character in query at index 238: http://localhost:8080/updateBoxCorrectionInstantly?examKey=16-17-%3ECBSE-%3ETERM%20I-%3ESA1-%3EVI-%3EScience-%3EA&studentName=AMOGH%20YOGESH%20KALE&studentRollno=3&studentND=-1&sheetName=cb8e806b32e9d670698655e0d2da10e3_img001210.jpg&box={%22$center%22:%22(66.0,%202253.0)%22,%22$conf%22:%22H%22,%22$corrected%22:true,%22$isAdminCorrected%22:true,%22$correction%22:%22-%22,%22$isDrawn%22:false,%22coords%22:[36,2214,96,2292],%22isTitle%22:false,%22pos%22:%22-%22,%22pred%22:%22-%22,%22boxTypeId%22:0,%22score%22:1} 
at java.net.URI$Parser.fail(URI.java:2829) 
at java.net.URI$Parser.checkChars(URI.java:3002) 
at java.net.URI$Parser.parseHierarchical(URI.java:3092) 
at java.net.URI$Parser.parse(URI.java:3034) 
at java.net.URI.<init>(URI.java:595) 
at java.net.URL.toURI(URL.java:949) 
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:232) 
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62) 
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1075) 
at org.apache.jmeter.protocol.http.proxy.Proxy.run(Proxy.java:212) 
+0

これはあなたに役立つかもしれません:http://meta.stackexchange.com/questions/79057/curly-brackets-in-urls – SpaceTrucker

+0

これは録音または再生中に起こったのですか?あなたは 'http://jmeter.apache.org/usermanual/functions.html #__ urlencode'関数を使ってみましたか? –

+0

が実際にあなたのリクエストですか? 'POST'ですか?あなたはなぜポストリクエストのために非常に多くのURLパラメータを送信していますか? formurlencodedリクエストプロパティを使用してリクエストボディの一部としてそれらを送信できませんか? –

答えて

2

具体的にその例外があなたのURIで、中括弧についてです:

/updateBoxCorrectionInstantly?<...>_img001210.jpg&box={ 

中括弧はunsafeとみなされます。

ゲートウェイやその他トランスポートエージェントがに知られているので、他の文字は安全ではありませんそのような文字を変更することがあります。これらの文字は、 "{"、 "}"、 "|"、 "\"、 "^"、 "〜"、 "["、 "]"および "` "です。安全でない文字はすべて、常にURL内でエンコードする必要があります。

だから%7D}%7B{のすべてのインスタンス、およびすべてのインスタンスを置き換えることができます。私の推測では、中括弧は "特殊"文字ではないので(単に安全ではない)、URIパーサーはそれらを好きではないので、レコーダーはそれらをエンコーディングしていないということです。だから、JMeterのレコーダーのバグと考えることができます。

:しかし、私はよりエレガントな解決策はいくつかの利点があり パラメータセクション、中( ?マーク過去の)すべてのパラメータを保存していると思います

/updateBoxCorrectionInstantly?examKey=16-17-%3ECBSE-%3ETERM%20I-%3ESA1-%3EVI-%3EScience-%3EA&studentName=AMOGH%20YOGESH%20KALE&studentRollno=3&studentND=-1&sheetName=cb8e806b32e9d670698655e0d2da10e3_img001210.jpg&box=%7B%22$center%22:%22(66.0,%202253.0)%22,%22$conf%22:%22H%22,%22$corrected%22:true,%22$isAdminCorrected%22:true,%22$correction%22:%22-%22,%22$isDrawn%22:false,%22coords%22:[36,2214,96,2292],%22isTitle%22:false,%22pos%22:%22-%22,%22pred%22:%22-%22,%22boxTypeId%22:0,%22score%22:1%7D 

:このように、最小限の溶液を、パスを設定することです

  1. それはあなたが明確にあなたがあなたがバリを使用することができます
  2. を送信しているパラメータを確認でき、自動的に
  3. それらをコードするためのオプションを持っていますあなたがする代わりに、静的な値(あなたにもパスにすることができますが、ない退屈でエラーを起こしやすいの設定の多くはなし)

必要がある場合ABLESは、ここで私は、この要求を作成する方法をのスクリーンショットです:

enter image description here

方法GETに設定されているため、すべてのパラメータは、とにかくURLの一部であることを行っているが、彼らは適切にエンコードされますので、ここではそれが送信されています方法は次のとおりです。

enter image description here

+0

解決策は、 のいずれかになります。 にURLをエンコードします。2.要求を記録し、記録されたシーケンスを開始する前に要求を再度フォーマットします – AbiSivam

関連する問題