有熟悉 OKHttp 的同学么。

2016-06-26 10:39:29 +08:00
 ifane

是这个样子的,我通过 OKHttp 模拟登陆某网站,需要 post 几个参数,其中一个参数是验证码,是中文的,当我尝试 post 过去,提示验证码错误,通过“ httpwatch ” 和 chrome 的开发者工具看了一下该网站登录时的参数, 如图,# 猜测这种情况可能是由于中文的编码问题,导致 post 到服务器时,服务器接受到的数据是乱码所以导致验证码验证错误, 有知道该如何解决的同学么.致谢!

3261 次点击
所在节点    问与答
9 条回复
faceair
2016-06-26 12:11:57 +08:00
大概是 gbk urlencode
skydiver
2016-06-26 12:23:36 +08:00
你都已经猜测了,为什么不改代码试试
ifane
2016-06-26 13:06:23 +08:00
@faceair 对的。 我通过测试时 gb2312 urlencode ,但是 okhttp 不知道如何设置其 urlencode 为 gb2312 ,请问您知道么
ifane
2016-06-26 13:07:11 +08:00
@skydiver 主要问题,在于, okhttp 不知道有啥方法可以修改器 urlencode 的编码方式为 gb2312 ,您知道么?
skydiver
2016-06-26 13:25:40 +08:00
@ifane 贴你的代码上来
ifane
2016-06-26 13:47:22 +08:00
public void loginpost(final String arg1, String arg2, String arg3, final LoginView loginView) {
RequestBody requestBody = new FormBody.Builder()
.add("__VIEWSTATE", viewstate)
.add("__VIEWSTATEGENERATOR", viewstategenerator)
.add("__EVENTVALIDATION", eventvalidation)
.add("Account", agr1)
.add("PWD", arg2)
.add("CheckCode", arg3)
.add("cmdok", "")
.build();
Request request=new Request.Builder()
.url(Common.LOGIN_URL)
.post(requestBody)
.build();
client.newCall(request).enqueue(
new Callback() {
skydiver
2016-06-26 13:57:34 +08:00
看了下 okhttp 代码,貌似都是只考虑了 utf8 ……没法改
xuhaoyangx
2016-06-26 16:07:16 +08:00
@ifane 把 okhttp 源码 download 下来吧,自己加一个这个
ifane
2016-06-26 16:54:14 +08:00
@xuhaoyangx 嗯嗯。 刚刚看了 okhttp 的源码,发现他会自动 urlencode 为 utf8 编码,加了一段代码将其改为 gb2312 编码,测试成功! 好开心,谢谢各位的帮助。致谢!
方便后来人:
RequestBody requestBody = new FormBody.Builder()
.add("__VIEWSTATE", viewstate)
.add("__VIEWSTATEGENERATOR", viewstategenerator)
.add("__EVENTVALIDATION", eventvalidation)
.add("Account", arg1)
.add("PWD", arg2)
.add_demo("CheckCode", arg3)//将这个参数传到自定义的函数里面,编码为 gb2312
.add("cmdok", "")
.build();

public Builder add_demo(String name, String value) {
names.add(HttpUrl.canonicalize(name, FORM_ENCODE_SET, false, false, true, true));
try {
values.add(URLEncoder.encode(value,"gb2312"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return this;
}

再次感谢大家的帮助,新手上路都是靠大家帮助

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/288358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX