You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OkHttp拼接URL调用LeapML API异常,直接写URL却正常

问题分析与解决办法

你遇到的核心问题是手动字符串拼接URL导致请求异常,但直接写完整URL正常,且表面上URL输出一致,大概率是以下几个隐蔽原因导致的,对应解决办法如下:

1. 参数未做URL编码

如果modelId或inferenceId包含特殊字符(比如/、%、空格、中文等),手动拼接字符串时不会自动编码,而直接写完整URL时你可能已经手动转义过这些字符。API收到未编码的参数后无法正确识别,导致返回异常。

解决办法:用HttpUrl.Builder构建URL,自动处理编码

HttpUrl requestUrl = new HttpUrl.Builder()
    .scheme("https")
    .host("api.leapml.dev")
    .addPathSegment("v1")
    .addPathSegment("images")
    .addPathSegment(modelId)
    .addPathSegment(inferenceId)
    .build();

Request request = new Request.Builder()
    .url(requestUrl)
    .build();

2. 参数包含隐藏不可见字符

modelId或inferenceId可能带有换行符、制表符、全角空格这类肉眼不可见的控制字符,打印request.url()时不会显示,但实际请求中会携带这些字符,导致API无法匹配到正确的资源。

解决办法:清理参数中的控制字符

// 移除所有非打印ASCII控制字符
modelId = modelId.replaceAll("\\p{C}", "");
inferenceId = inferenceId.replaceAll("\\p{C}", "");

// 或者先去除首尾空白,再处理内部控制字符
modelId = modelId.trim().replaceAll("[\\n\\t\\r]", "");
inferenceId = inferenceId.trim().replaceAll("[\\n\\t\\r]", "");

3. URL解析的细微差异

手动拼接的字符串转URL对象时,和直接写的完整字符串在底层解析逻辑上可能存在差异(比如路径规范化、大小写处理),虽然request.url()输出一致,但实际发送的请求头或路径匹配逻辑可能不同。

解决办法:强制用HttpUrl.parse()解析拼接后的字符串

String rawUrl = "https://api.leapml.dev/v1/images/" + modelId + "/" + inferenceId;
HttpUrl parsedUrl = HttpUrl.parse(rawUrl);
if (parsedUrl == null) {
    // 处理无效URL的情况
    throw new IllegalArgumentException("Invalid URL: " + rawUrl);
}

Request request = new Request.Builder()
    .url(parsedUrl)
    .build();

4. 路径段存在多余斜杠

如果modelId或inferenceId开头/结尾带有斜杠,手动拼接后会出现重复斜杠(比如/v1/images//xxx/yyy),虽然request.url()显示时会自动合并斜杠,但部分API的路由匹配逻辑对这类不规范路径不兼容。

解决办法:拼接前确保参数无首尾斜杠

modelId = modelId.replaceAll("^/+|/+$", ""); // 移除首尾所有斜杠
inferenceId = inferenceId.replaceAll("^/+|/+$", "");
String rawUrl = "https://api.leapml.dev/v1/images/" + modelId + "/" + inferenceId;

内容的提问来源于stack exchange,提问作者Mazen H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:15:33