请教:android中httpclient重定向问题 http://blog.sina.com.cn/s/blog_60d2d62a01011shn.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主,同样的问题new Thread() { public void run() { try { /* * NameValuePair代表一个HEADER,List<NameValuePair> * 存储全部的头字段 * UrlEncodedFormEntity类似于URLEncoder语句进行URL编码 * HttpPost类似于HTTP的POST请求 * client.execute()类似于发出请求,并返回Response */ DefaultHttpClient client = new DefaultHttpClient(); client.setRedirectHandler(new RedirectHandler() { @Override public boolean isRedirectRequested( HttpResponse response, HttpContext context) { Log.e("isRedirectRequested_response code:", response.getStatusLine() .getStatusCode() + ""); return false; } @Override public URI getLocationURI( HttpResponse response, HttpContext context) throws ProtocolException { // TODO Auto-generated method stub return null; } }); List<NameValuePair> list = new ArrayList<NameValuePair>(); NameValuePair pair1 = new BasicNameValuePair( "name", name.getText().toString()); NameValuePair pair2 = new BasicNameValuePair( "age", age.getText().toString()); list.add(pair1); list.add(pair2); UrlEncodedFormEntity entity = new UrlEncodedFormEntity( list, "UTF-8"); HttpPost post = new HttpPost(url); post.setEntity(entity); HttpResponse response = client.execute(post); Log.e("response code:", response .getStatusLine().getStatusCode() + ""); if (response.getStatusLine().getStatusCode() == 200) { InputStream in = response.getEntity() .getContent();// 接收服务器的数据,并在Toast上显示 String str = readString(in); Log.e("response_post:", str); } else { Log.e("response_post:", "POST提交失败"); } } catch (Exception e) { e.printStackTrace(); } } }.start();以上这段代码是模拟post请求,假设发生重定向,本来 response .getStatusLine().getStatusCode() 应该返回302的,可是不知道为什么总是返回200,求解。我已进行重定向的处理:http://blog.sina.com.cn/s/blog_60d2d62a01011shn.html#post还有个问题,为什么用HttpURLConnection获取不到完整额网页源码,上一段也是一样获取不到全部的网页源码,是怎么回事呢? 重写RedirectHandler public class RedirectHandler extends DefaultRedirectHandler{ @Override public boolean isRedirectRequested(HttpResponse response, HttpContext context) { // TODO Auto-generated method stub return false; }}调用时修改DefaultHttpClient 的RedirectHandler为重写的RedirectHandler DefaultHttpClient loginClient = new DefaultHttpClient(); RedirectHandler redirectHandler=new RedirectHandler(); loginClient.setRedirectHandler(redirectHandler); HttpResponse response=loginClient.execute(httppost); 我的这个是什么情况啊,client没有那个设置重定向的方法啊 7楼让你复写一个同名类RedirectHandler,来覆盖原来的org.apache.http.client.RedirectHandler你是写了个新类MyRedirectHandlerclient的setRedirectHandler方法不接受这个参数,不认识 你这么搞一下也行 this.httpClient.setRedirectHandler(new RedirectHandler() { public boolean isRedirectRequested(HttpResponse response, HttpContext context) { return false; } }); android通过什么来监听应用程序的启动? android AIDL 调用空指针,求高手解答 如何做一个引导页只在第一次启动的时候出现,之后就不在出现? 请问安装android sdk manager,下载速度为什么这么慢? 求几本关于UI界面的书、 andriod2.1系统怎么配置不好 做毕业设计选题时的疑惑 新ADT下,不知小程序为何跑不起来 设置了threme之后,程序启动总是显示已停止运行 一个很奇怪的问题,了解一下吧? 为什么安卓上有很多街机游戏?他们都如何移植到安卓上的? android手机应用程序开发所遇到的问题
public void run() {
try {
/*
* NameValuePair代表一个HEADER,List<NameValuePair>
* 存储全部的头字段
* UrlEncodedFormEntity类似于URLEncoder语句进行URL编码
* HttpPost类似于HTTP的POST请求
* client.execute()类似于发出请求,并返回Response
*/
DefaultHttpClient client = new DefaultHttpClient();
client.setRedirectHandler(new RedirectHandler() {
@Override
public boolean isRedirectRequested(
HttpResponse response,
HttpContext context) {
Log.e("isRedirectRequested_response code:",
response.getStatusLine()
.getStatusCode() + "");
return false;
}
@Override
public URI getLocationURI(
HttpResponse response,
HttpContext context)
throws ProtocolException {
// TODO Auto-generated method stub
return null;
}
});
List<NameValuePair> list = new ArrayList<NameValuePair>();
NameValuePair pair1 = new BasicNameValuePair(
"name", name.getText().toString());
NameValuePair pair2 = new BasicNameValuePair(
"age", age.getText().toString());
list.add(pair1);
list.add(pair2);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
list, "UTF-8");
HttpPost post = new HttpPost(url);
post.setEntity(entity);
HttpResponse response = client.execute(post);
Log.e("response code:", response
.getStatusLine().getStatusCode() + "");
if (response.getStatusLine().getStatusCode() == 200) {
InputStream in = response.getEntity()
.getContent();// 接收服务器的数据,并在Toast上显示
String str = readString(in);
Log.e("response_post:", str);
} else {
Log.e("response_post:", "POST提交失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
以上这段代码是模拟post请求,假设发生重定向,本来 response
.getStatusLine().getStatusCode() 应该返回302的,可是不知道为什么总是返回200,求解。我已进行重定向的处理:http://blog.sina.com.cn/s/blog_60d2d62a01011shn.html#post
还有个问题,为什么用HttpURLConnection获取不到完整额网页源码,上一段也是一样获取不到全部的网页源码,是怎么回事呢?
public class RedirectHandler extends DefaultRedirectHandler{ @Override
public boolean isRedirectRequested(HttpResponse response,
HttpContext context) {
// TODO Auto-generated method stub
return false;
}}
调用时修改DefaultHttpClient 的RedirectHandler为重写的RedirectHandler
DefaultHttpClient loginClient = new DefaultHttpClient();
RedirectHandler redirectHandler=new RedirectHandler();
loginClient.setRedirectHandler(redirectHandler);
HttpResponse response=loginClient.execute(httppost);
我的这个是什么情况啊,client没有那个设置重定向的方法啊
你是写了个新类MyRedirectHandlerclient的setRedirectHandler方法不接受这个参数,不认识
this.httpClient.setRedirectHandler(new RedirectHandler() {
public boolean isRedirectRequested(HttpResponse response, HttpContext context) {
return false;
}
});