http://blog.sina.com.cn/s/blog_60d2d62a01011shn.html

解决方案 »

  1.   

    楼主,同样的问题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获取不到完整额网页源码,上一段也是一样获取不到全部的网页源码,是怎么回事呢?
      

  2.   

    重写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);
      

  3.   


    我的这个是什么情况啊,client没有那个设置重定向的方法啊
      

  4.   

    7楼让你复写一个同名类RedirectHandler,来覆盖原来的org.apache.http.client.RedirectHandler
    你是写了个新类MyRedirectHandlerclient的setRedirectHandler方法不接受这个参数,不认识
      

  5.   

    你这么搞一下也行
    this.httpClient.setRedirectHandler(new RedirectHandler() {
    public boolean isRedirectRequested(HttpResponse response, HttpContext context) {
    return false;
    }
    });