是这个样子的,我通过 OKHttp 模拟登陆某网站,需要 post 几个参数,其中一个参数是验证码,是中文的,当我尝试 post 过去,提示验证码错误,通过“ httpwatch ” 和 chrome 的开发者工具看了一下该网站登录时的参数, 如图,# 猜测这种情况可能是由于中文的编码问题,导致 post 到服务器时,服务器接受到的数据是乱码所以导致验证码验证错误, 有知道该如何解决的同学么.致谢!
1
faceair 2016-06-26 12:11:57 +08:00
大概是 gbk urlencode
|
2
skydiver 2016-06-26 12:23:36 +08:00 via iPad
你都已经猜测了,为什么不改代码试试
|
3
ifane OP @faceair 对的。 我通过测试时 gb2312 urlencode ,但是 okhttp 不知道如何设置其 urlencode 为 gb2312 ,请问您知道么
|
4
ifane OP @skydiver 主要问题,在于, okhttp 不知道有啥方法可以修改器 urlencode 的编码方式为 gb2312 ,您知道么?
|
6
ifane OP 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() { |
7
skydiver 2016-06-26 13:57:34 +08:00 via iPad
看了下 okhttp 代码,貌似都是只考虑了 utf8 ……没法改
|
8
xuhaoyangx 2016-06-26 16:07:16 +08:00
@ifane 把 okhttp 源码 download 下来吧,自己加一个这个
|
9
ifane OP @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; } 再次感谢大家的帮助,新手上路都是靠大家帮助 |