android - 如果 url 字符串包含“~”符号,则改造调用错误的 url 导致 404 错误
问题描述
我已经创建了改造客户端和 api 接口,但改造跳过了 url 中的某些部分并调用了错误的 url
这是完整的网址 http://192.168.0.201/~amol/eflbudget/budgetmanagements/test
改造调用 http://192.168.0.201/budgetmanagements/test/的 url
这会导致 404 错误
//here is my retrofit client code
public static Retrofit getClient() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
if (retrofit != null) {
return retrofit;
}
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.0.201/")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
return retrofit;
}
// below is api call
@Multipart
@POST("/~amol/eflbudget/budgetmanagements/test/")
Call<ResponseBody> postMail(
@Part("user_id") RequestBody userId,
@Part("lead_id") RequestBody leadId,
@Part("to") RequestBody to,
@Part("cc_to") RequestBody ccId,
@Part("template_id") RequestBody tempId,
@Part("sender") RequestBody senderId,
@Part("subject") RequestBody subject,
@Part("message") RequestBody message,
@Part MultipartBody.Part file
);
预期的 api 网址:http: //192.168.0.201/~amol/eflbudget/budgetmanagements/test
实际网址:http: //192.168.0.201/budgetmanagements/test/
这里 /~amol/eflbudget url 中的这一部分被忽略
了,有人可以在这里提出建议吗?
解决方案
在RFC中包含以下字符:
无保留字符
URI 中允许但没有保留用途的字符称为未保留字符。这些包括大写和小写字母、十进制数字、连字符、句点、下划线和波浪号。
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
伯纳斯-李等人。标准跟踪 [第 13 页]
RFC 3986 URI 通用语法 2005 年 1 月
在用相应的百分比编码的 US-ASCII 八位字节替换未保留字符方面不同的 URI 是等效的:它们标识相同的资源。然而,URI 比较实现并不总是在比较之前执行规范化(参见第 6 节)。为了保持一致性,在 ALPHA(%41-%5A 和 %61-%7A)、DIGIT (%30-%39)、连字符 (%2D)、句点 (%2E)、下划线 (% 5F) 或波浪号 (%7E) 不应由 URI 生产者创建,并且当在 URI 中找到时,应由 URI 规范器将其解码为相应的未保留字符。
推荐阅读
- java - 是否可以使用新的 thymeleaf 模型刷新所有客户端?
- reactjs - TypeScript 不解析 react-native-web 代码
- regex - 第一行 Powershell 错误输出的正则表达式匹配
- assimp - 将 assimp 骨骼数据与其他顶点数据相结合
- c++ - 在应用程序中集成共享对象,ldd 和 readelf 显示不同的输出
- discord.js - 我正在尝试从人员列表中随机选择 5 个选项
- docker - 尝试在 Docker 容器中安装 Python 时出错
- apexcharts - 删除面积图下的空白
- c# - 实体框架无法在 C# 后端通过其 ID 提取特定记录
- vb.net - 我们可以使用在 Visual Studio 2019 中开发的 Visual Studio 2015 构建项目吗