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

1 faceair 2016 年 6 月 26 日 大概是 gbk urlencode |
2 skydiver 2016 年 6 月 26 日 via iPad 你都已经猜测了,为什么不改代码试试 |
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 年 6 月 26 日 via iPad 看了下 okhttp 代码,貌似都是只考虑了 utf8 ……没法改 |
8 xuhaoyangx 2016 年 6 月 26 日 @ifane 把 okhttp 源码 download 下来吧,自己加一个这个 |
9 ifane OP @xuhaoyangx 嗯嗯。 刚刚看了 okhttp 的源码,发现他会自动 urlencode 为 utf8 编码,加了一段代码将其改为 编码,测试成功! 好开心,谢谢各位的帮助。致谢! 方便后来人: RequestBody requestBody = new FormBody.Builder() .add("__VIEWSTATE", viewstate) .add("__VIEWSTATEGENERATOR", viewstategenerator) .add("__EVENTVALIDATION", eventvalidation) .add("Account", arg1) .add("PWD", arg2) .add_demo("CheckCode", arg3)//将这个参数传到自定义的函数里面,编码为 .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,"")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return this; } 再次感谢大家的帮助,新手上路都是靠大家帮助 |