如下图从 Wireshark 捕获的,左侧是通过此代码从 Jsoup 创建的包。
Connection.Response response = Jsoup.connect("http://pantip.com/login/authentication")
.header("Content-Type", "application/x-www-form-urlencoded")
.timeout(9000)
.method(Connection.Method.POST)
.data("member[email]", username, "member[crypted_password]", password, "action", "login", "redirect", "")
.followRedirects(false)
.execute();
右侧是通过以下代码从 HttpClient 创建的包。
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("member[email]", username));
nvps.add(new BasicNameValuePair("member[crypted_password]", password));
nvps.add(new BasicNameValuePair("action", "login"));
nvps.add(new BasicNameValuePair("redirect", ""));
HttpPost postLogin = new HttpPost("http://pantip.com/login/authentication");
postLogin.setEntity(new StringEntity("member[email]="+username+"&member[crypted_password]="+password+"&action=login&redirect="));
postLogin.addHeader("Content-Type", "application/x-www-form-urlencoded");
postLogin.addHeader("Accept-Encoding", "gzip");
postLogin.addHeader("User-Agent", "Dalvik/1.4.0 (Linux; U; Android 2.3.7; Full Android on x86 Emulator Build/GINGERBREAD)");
我尝试为每个标题设置相同的值,包括用户代理。这是登录网站的包。
我的问题是Jsoup 创建的左侧包正在工作,但是当我使用 HttpClient 时,登录服务器响应不正确,但请求包相同,为什么?
在我的 android 项目中,我必须使用 HttpClient。这是我的约束。