【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)

我希望你能明白什么是真正的勇敢,并不是把枪拿在手里就是勇敢。而是你明明知道会失败,还是会去做,不管发生什么事情,你都会坚持下去。你很少会赢,但总会有赢的时候。
—— 《杀死一只知更鸟》

一、写在前面

高德用户 key 已脱敏,有相关业务功能的朋友可以去高德控制台申请

二、问题场景

最近在做一个请求 url 拉取数据的请求的时候,出现 Illegal character in scheme name at index 0 异常,但是访问对应 url 正常,如下图:

image-20220708094809782

三、场景重现

1.拼接字符串并请求高德url

URL 地址:

image-20220708100706240

拼接核心代码:

import com.mashibing.internalcommon.constant.MapConfigConstant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@Service
public class MapDicDistrictClient {

    @Value("${map.key}")
    private String mapKey;

    @Resource
    private RestTemplate restTemplate;

    public String dicDistrict(String keywords){

        // 拼接请求的 url
        StringBuilder url = new StringBuilder();
        url.append(MapConfigConstant.DISTRICT_URL);
        url.append("?");
        url.append("keywords=").append(keywords);
        url.append("&");
        url.append("subdistrict=3");
        url.append("&");
        url.append("key=").append(mapKey);
        System.out.println(url);
        ResponseEntity<String> forEntity = restTemplate.getForEntity(url.toString(), String.class);

        return forEntity.getBody();
    }

}

2.控制台异常提示

控制台出现出现 Illegal character in scheme name at index 0 异常。

image-20220708095059604

3.手动访问对应 URL 结果

我第一反省是 URL 拼接有误,于是手动访问了 URL

image-20220708094809782

但是 URL 访问正常。

四、正确流程

1.报错分析

于是我仔细看了一下控制台提示,他说我 索引 0 位置有非法字符 ,于是我继续向后看,发现了奇怪的 %20 ,在我的印象里, %20 应该是空格的 html 转义编码。所以我发现了是自己 URL 有误。

image-20220708095639214

2.查并修改找异常

查找拼接字符串时,第一个字段为:MapConfigConstant.DISTRICT_URL 于是我去看了一下这个静态变量

于是发现他真的有个空格,然后我就把空格删了。

3.重新运行并请求

请求成功,截图如下图:

(图片已失效)

五、总结反思

解决 BUG 后,我又重新试了很多次,每次复制 URL 都没有带空格,应该是第一次拼接时候,将连接写在了注释里,复制粘贴的时候不小心复制了一个空格。

总结:

  1. 复制粘贴时候要小心
  2. 有问题要仔细看控制台报错

六、写在后面

最近工作较忙,需求较多,虽然遇到了很多问题,但是没有时间沉底,就鸽了两周,等忙完这个项目,会逐一记录最近遇到的问题以及解决方案。

欢迎关注,实现期间会经常发一些工作中遇到的问题。

欢迎随时留言讨论,与君共勉,知无不答!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用和提供了关于出现"java.lang.IllegalArgumentException: Illegal character in scheme name at index 0"异常的信息。这个异常通常是由于URL地址中出现非法字符导致的。中提到控制台显示了类似的错误信息,而中的引用则提供了具体的异常堆栈信息,指出了错误发生的位置。引用给出了一种可能的解决方案,他经过仔细查看控制台提示后发现URL地址前面多了一个空格,去掉空格后问题得到解决。 因此,要解决这个异常,你需要仔细检查URL地址,确保其中没有非法字符,特别是在URLscheme name部分。同时,还要注意检查是否有无意添加的空格或转义符。确保URL地址的格式正确后,重新请求即可解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【请求外部接口异常java.lang.IllegalArgumentException: Illegal character in scheme name at index 0](https://blog.csdn.net/weixin_42975117/article/details/128949568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [java.lang.IllegalArgumentException:Input == null的异常处理](https://download.csdn.net/download/weixin_38645373/14043809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值