Eryu--00 2024-09-03 20:46 采纳率: 50%
浏览 3

对于jmeter里面url指向报错的提问

在使用jmeter的时候他给我报了这个错误,我知道是url里的字符没识别,按道理token里面会指向提取的json但是没出现,该怎样去修改,麻烦大神教我一下

img

img


java.net.URISyntaxException: Illegal character in query at index 81: http://shop-xo.hctestedu.com/index.php?application=app&s=/api/order/index&token=${login}
    at java.net.URI$Parser.fail(Unknown Source)
    at java.net.URI$Parser.checkChars(Unknown Source)
    at java.net.URI$Parser.parseHierarchical(Unknown Source)
    at java.net.URI$Parser.parse(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    at java.net.URL.toURI(Unknown Source)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:625)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:66)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1311)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1300)
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268)
    at java.lang.Thread.run(Unknown Source)

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-09-03 20:47
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题涉及到URL编码问题,尤其是当使用index.php这样的文件名时。index.php通常包含特殊字符(如空格、换行符等),这些字符可能会导致解析问题。

    要解决这个问题,您可以尝试以下方法:

    方法一:使用UTF-8编码

    首先确保您的HTTP请求中的查询字符串使用的是UTF-8编码。这可以通过设置http.charset属性来实现,例如:

    <sampler>
      <sampler-class>org.apache.jmeter.threads.HTTPSampler</sampler-class>
      <param-name>http.charset</param-name>
      <value>utf-8</value>
    </sampler>
    

    方法二:URL转义处理

    如果您希望将所有的特殊字符都进行转义,可以使用java.net.URLEncoder.encode()方法。例如,您可以为每个参数创建一个单独的转义版本,并将其放入queryParameters数组中:

    List<NameValuePair> queryParams = new ArrayList<>();
    queryParams.add(new BasicNameValuePair("application", "app"));
    queryParams.add(new BasicNameValuePair("s", "/api/order/index"));
    for (String param : urlParams.keySet()) {
        queryParams.add(new BasicNameValuePair(param, urlParams.get(param)));
    }
    
    // 使用URLEncoder.encode进行转义
    List<BasicNameValuePair> encodedQueryParams = new ArrayList<>(queryParams.size());
    for (BasicNameValuePair qp : queryParams) {
        String encodedParam = URLEncoder.encode(qp.getValue(), "UTF-8");
        encodedQueryParams.add(new BasicNameValuePair(qp.getName(), encodedParam));
    }
    

    方法三:使用正则表达式

    对于更复杂的情况,您可能还需要使用正则表达式来进行转换。例如,如果您想要匹配所有包含非法字符的URL,可以使用以下正则表达式:

    /s/ig
    

    然后,您可以在URL中替换掉所有匹配的部分:

    public static void main(String[] args) throws Exception {
        // 假设我们有一个合法的URL
        String originalUrl = "http://example.com/?some=bad%20characters";
        
        // 使用正则表达式替换
        String regex = "(?s)/\\b[^a-zA-Z0-9]+/";
        String replacedUrl = originalUrl.replaceAll(regex, "");
        
        System.out.println(replacedUrl);
    }
    

    请注意,上述方法中的正则表达式适用于Java 8及更高版本。如果您正在使用较旧的Java版本,可能需要根据实际情况调整正则表达式的语法。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月3日

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏