gpt4 book ai didi

java - 为什么 OkHttp 不对百分号进行编码?

转载 作者:行者123 更新时间:2023-11-30 07:52:34 26 4
gpt4 key购买 nike

来自 HttpUrl.java :

static final String FORM_ENCODE_SET = " \"':;<=>@[]^`{}|/\\?#&!$(),~";

来自 FormBody.java

public Builder addEncoded(String name, String value) {
names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, true, false, true, true, charset));
values.add(HttpUrl.canonicalize(value, FORM_ENCODE_SET, true, false, true, true, charset));
return this;
}

这里的一个副作用是,当我们发布登录表单(用户名和密码)时,如果密码包含“%”(百分号),那么它没有被编码,用户无法登录。为什么会这样字符不是由 OkHttp 编码的?

作为引用,下面是我们创建表单的方式(映射包含两个字符串,用户名和密码):

public RequestBody createEncodedFormBody(final Map<String, String> content) {
final FormBody.Builder builder = new FormBody.Builder();
for (final Entry<String, String> contentEntry : content.entrySet()) {
builder.addEncoded(contentEntry.getKey(), contentEntry.getValue());
}
return builder.build();
}

最佳答案

使用 FormBody.Builder.add() 而不是 addEncoded()。 encoded 方法假定您已经对输入进行了编码。

关于java - 为什么 OkHttp 不对百分号进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com