Android HTTP Post 授权请求
Android HTTP Post authorization request
我正在尝试在 Android 应用程序中发送 HTTP Post 请求。
这是我应该发送的:
这是我应该收到的:
所以,总而言之,我需要从响应中获取 cookie,响应代码应该是 302。
我有以下 Android 代码:
private static String makePostRequest() {
HttpClient httpClient = new DefaultHttpClient();
// replace with your url
HttpPost httpPost = new HttpPost("http://g1.botva.ru/login.php");
boolean flag = httpClient.getParams().isParameterTrue(ClientPNames.HANDLE_REDIRECTS);
httpPost.addHeader("Accept", "*/*");
httpPost.addHeader("Accept-Encoding", "gzip, deflate");
//httpPost.addHeader("Content-Length", "83");
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httpPost.addHeader("User-Agent", "runscope/0.1");
Header [] arr = httpPost.getAllHeaders();
String result123 = "";
//Post Data
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(5);
nameValuePair.add(new BasicNameValuePair("do_cmd", "login"));
nameValuePair.add(new BasicNameValuePair("server", "1"));
nameValuePair.add(new BasicNameValuePair("email", "avmalyutin@mail.ru"));
nameValuePair.add(new BasicNameValuePair("password", "avmalyutin1234"));
nameValuePair.add(new BasicNameValuePair("remember", "1"));
//Encoding POST data
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
// log exception
e.printStackTrace();
}
//making POST request.
try {
HttpResponse response = httpClient.execute(httpPost);
String getCookie = response.getHeaders("Pragma").length + "";
result123 = response.getStatusLine().getStatusCode()+"";
// write response to log
Log.d("Http Post Response:", response.toString());
} catch (ClientProtocolException e) {
// Log exception
e.printStackTrace();
} catch (IOException e) {
// Log exception
e.printStackTrace();
}
return result123;
}
收到code 200,Cookies里只有PHPSESSIONID,没有其他cookies。
您将需要检测 DefaultHttpClient,以便您可以看到 WIRE 和 HEADERS。
Google 为您正在使用的客户端记录 WIRE HEADERS。如果你搞不懂logging调试(你可能要考虑DIFF client)
然后,比较执行 post 的 2 个框架(您的测试工具 VS android),只是缩小 headers + POST [=18= 之间的差异] 正在发送。当您让 android 与您的测试工具收敛时,android 将产生与您报告的从测试工具获得的相同 302 结果。
添加函数
con.setInstanceFollowRedirects(false);
解决问题并停止重定向。而且我还收到了所需的代码 302。
感谢大家的帮助
我正在尝试在 Android 应用程序中发送 HTTP Post 请求。
这是我应该发送的:
这是我应该收到的:
所以,总而言之,我需要从响应中获取 cookie,响应代码应该是 302。
我有以下 Android 代码:
private static String makePostRequest() {
HttpClient httpClient = new DefaultHttpClient();
// replace with your url
HttpPost httpPost = new HttpPost("http://g1.botva.ru/login.php");
boolean flag = httpClient.getParams().isParameterTrue(ClientPNames.HANDLE_REDIRECTS);
httpPost.addHeader("Accept", "*/*");
httpPost.addHeader("Accept-Encoding", "gzip, deflate");
//httpPost.addHeader("Content-Length", "83");
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httpPost.addHeader("User-Agent", "runscope/0.1");
Header [] arr = httpPost.getAllHeaders();
String result123 = "";
//Post Data
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(5);
nameValuePair.add(new BasicNameValuePair("do_cmd", "login"));
nameValuePair.add(new BasicNameValuePair("server", "1"));
nameValuePair.add(new BasicNameValuePair("email", "avmalyutin@mail.ru"));
nameValuePair.add(new BasicNameValuePair("password", "avmalyutin1234"));
nameValuePair.add(new BasicNameValuePair("remember", "1"));
//Encoding POST data
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
// log exception
e.printStackTrace();
}
//making POST request.
try {
HttpResponse response = httpClient.execute(httpPost);
String getCookie = response.getHeaders("Pragma").length + "";
result123 = response.getStatusLine().getStatusCode()+"";
// write response to log
Log.d("Http Post Response:", response.toString());
} catch (ClientProtocolException e) {
// Log exception
e.printStackTrace();
} catch (IOException e) {
// Log exception
e.printStackTrace();
}
return result123;
}
收到code 200,Cookies里只有PHPSESSIONID,没有其他cookies。
您将需要检测 DefaultHttpClient,以便您可以看到 WIRE 和 HEADERS。 Google 为您正在使用的客户端记录 WIRE HEADERS。如果你搞不懂logging调试(你可能要考虑DIFF client)
然后,比较执行 post 的 2 个框架(您的测试工具 VS android),只是缩小 headers + POST [=18= 之间的差异] 正在发送。当您让 android 与您的测试工具收敛时,android 将产生与您报告的从测试工具获得的相同 302 结果。
添加函数
con.setInstanceFollowRedirects(false);
解决问题并停止重定向。而且我还收到了所需的代码 302。
感谢大家的帮助