2

所以我有构造一个HttpPost请求的代码,如下所示......

public LoginForm apa;
....
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("https", 
SSLSocketFactory.getSocketFactory(), 443));
HttpParams httpparams = new BasicHttpParams();
SingleClientConnManager mgr = new SingleClientConnManager(httpparams, schemeRegistry);
HttpClient httpclient = new DefaultHttpClient(mgr, httpparams);
try {
  List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
  for(String i : apa.getParams().keySet()){
  nameValuePairs.add(new BasicNameValuePair(i, apa.getParams().get(i)));
}
List<NameValuePair> cookies = new ArrayList<NameValuePair>();
StringBuilder sb = new StringBuilder();
for(String i : apa.getCookies().keySet()){
  sb.append(i);
  sb.append("=");
  sb.append(apa.getCookies().get(i));
  sb.append(";");
}
// Trying to remove last ;
String cookie = sb.toString();
cookie = cookie.substring(0, cookie.length()-1);
HttpPost httppost = new HttpPost(URL);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httppost.setHeader(HTTP.CONTENT_TYPE, "application/x-www-form-urlencoded");
httppost.setHeader("Cookie", cookie);
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
System.out.println(EntityUtils.toString(response.getEntity()));

它没有像我预期的那样登录,所以有没有办法输出整个请求(标头和所有)以将其与我在 Chrome 开发工具中看到的匹配?我是不是想太多了?一般是否有适用于 Android 或 Java 的表单登录库?我需要添加内容长度吗?

4

1 回答 1

4

打印标题很容易 - 您可以使用方法列出它们getAllHeaders。如果需要打印HttpEntity,可以使用方法writeTo将整个实体写入ByteArrayOutputStream并使用toString.

于 2013-10-10T21:13:42.137 回答