2017-01-26 23 views
7

Tôi đang cố gắng ghi lại giao tiếp máy khách-máy chủ web của mình bằng cách sử dụng Jmeter. Sau khi Jmeter và trình duyệt được cấu hình để ghi ứng dụng. Khi một yêu cầu bài viết được thực hiện từ máy khách đến máy chủ, lỗi sau sẽ xảy ra. Bất kỳ ý tưởng làm thế nào để mã hóa URL đang được ghi lại?Máy chủ proxy Jmeter Http ném java.net.URISyntaxException: Ký tự không hợp lệ trong truy vấn tại lỗi chỉ mục

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

Điều này có thể giúp bạn: http://meta.stackexchange.com/questions/79057/curly-brackets-in-urls – SpaceTrucker

+0

điều này xảy ra trong quá trình ghi hoặc phát lại? bạn đã thử sử dụng chức năng 'http: //jmeter.apache.org/usermanual/functions.html #__ urlencode' chưa? –

+0

là yêu cầu của bạn thực sự 'POST'? tại sao bạn gửi quá nhiều tham số url cho yêu cầu đăng bài? Bạn không thể gửi chúng như là một phần của yêu cầu cơ thể bằng cách sử dụng bất động sản yêu cầu formurlencoded? –

Trả lời

2

Cụ thể ngoại lệ đó là về dấu ngoặc nhọn trong URI của bạn:

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

ngoặc Quăn được coi unsafe:

nhân vật khác là không an toàn vì các cổng và đại lý vận tải khác được biết đến đôi khi sửa đổi các ký tự như vậy. Các ký tự này là "{", "}", "|", "\", "^", "~", "[", "]" và "` ". Tất cả các ký tự không an toàn phải luôn được mã hóa trong URL.

Vì vậy, bạn có thể thay thế tất cả các trường của { với %7B, và tất cả các trường hợp của } với %7D. Đoán của tôi là máy ghi không mã hóa chúng bởi vì dấu ngoặc nhọn không phải là ký tự "đặc biệt" (chúng chỉ là "không an toàn"), trong khi trình phân tích cú pháp URI không thích chúng. Vì vậy, bạn có thể xem xét nó một lỗi trong ghi JMeter. Vì vậy giải pháp tối thiểu là để thiết lập Đường dẫn tới:

/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 

Tuy nhiên, tôi nghĩ rằng một giải pháp thanh lịch hơn là tiết kiệm tất cả các thông số (quá khứ dấu ?) trong thông số phần, trong đó có vài ưu điểm:

  1. Nó có một tùy chọn để tự động mã hóa chúng
  2. bạn có thể thấy rõ mà các tham số bạn đang gửi
  3. bạn có thể sử dụng vari ables khi bạn cần phải thay vì giá trị tĩnh (bạn có thể trong con đường là tốt, nhưng không phải không có nhiều cấu hình tẻ nhạt và dễ bị lỗi)

Dưới đây là một ảnh chụp màn hình như thế nào tôi sẽ tạo ra yêu cầu này:

enter image description here

Phương pháp được thiết lập để GET, tất cả các thông số sẽ là một phần của URL anyways, nhưng họ sẽ được mã hóa đúng cách, vì vậy đây là làm thế nào nó được gửi:

enter image description here

+0

Vì vậy, các giải pháp có thể là bất kỳ một trong những điều sau đây 1. Mã hóa URL trong ứng dụng 2. Ghi lại yêu cầu và định dạng lại yêu cầu trước khi bắt đầu chuỗi được ghi lại – AbiSivam

Các vấn đề liên quan