0 0

android 通过httpclient进行post和get操作(代码2.3系统可以正常运行,但是4.0系统在请求数据时直接出错)5

简单的进行登录和签到的操作,程序编译后再2.3的系统下可以正常运行,但是无法在4.0的系统上运行,httpclient.execute方法出现错误进行跳出。
代码如下:

 

package com.vi88;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;


import android.net.Proxy;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;

public class Main extends Activity {
	private DefaultHttpClient httpclient;
	private String login_url="http://www.vi88.com/forum/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1";
	private String sign_url="plugin.php?id=dsu_amupper:pper&ajax=1&formhash=";
	private String bbs_url="http://www.vi88.com/forum/forum.php";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取代理信息 
        
        String host = Proxy.getDefaultHost();  
        int port = Proxy.getDefaultPort();  
        Log.d("", "[createHttpClient] proxyHost = " + host); 
        Log.d("", "[createHttpClient] proxyPort = " + port);
        //设置代理
        if(port!=-1){
        	HttpHost httpHost = new HttpHost(host, port);
            HttpParams httpParams = new BasicHttpParams();  
            httpParams.setParameter(ConnRouteParams.DEFAULT_PROXY, httpHost); 
            httpclient=new DefaultHttpClient(httpParams);
        }else{
        	httpclient=new DefaultHttpClient();
        }       
        //.0.post();
        login("123456789","123456789");
        String sign_url1=getsignurl();
        sign(sign_url1);
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    private void login(String username,String password){
    	HttpPost httppost = new HttpPost(login_url);
    	List<NameValuePair> parameters = new ArrayList<NameValuePair>();
    	parameters.add(new BasicNameValuePair("fastloginfield", "username"));
    	parameters.add(new BasicNameValuePair("handlekey", "ls"));
    	parameters.add(new BasicNameValuePair("password", password));
    	parameters.add(new BasicNameValuePair("quickforward", "yes"));
    	parameters.add(new BasicNameValuePair("username", username));
    	String result="";
    	int j=0;
    	while(!result.contains("欢迎您回来")&&j<5){
    		try {
            	UrlEncodedFormEntity uef = new UrlEncodedFormEntity(parameters, HTTP.UTF_8);
                httppost.setEntity(uef);
                result=get_post_result(httppost,httpclient); 
                
                Log.e("result", result);
                j++;
            } catch (Exception e) {
            	j++;
            }
    	}
    	
    	
    }
	private static String get_post_result(HttpPost httppost,DefaultHttpClient httpclient){
    	String result="";
    	BufferedReader in = null; 
    	HttpResponse response;
		try {
			response = httpclient.execute(httppost);
			
			
			in = new BufferedReader(new InputStreamReader(response.getEntity()  
	                .getContent(),"gbk"));  
	        StringBuffer sb = new StringBuffer("");  
	        String line = "";  
	        String NL = System.getProperty("line.separator"); 
	        while ((line = in.readLine()) != null) {  
	            sb.append(line + NL);  
	        }  
	        in.close();  
	        result = sb.toString(); 
	        
	        
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e("ClientProtocolException", e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e("IOException", e.getMessage());
		}  
        
        
    	return result;
    	
    }
	private String getsignurl(){
		String url="";
		HttpGet get = new HttpGet(bbs_url);
		String result="";
    	BufferedReader in = null; 
    	HttpResponse response;
		try {
            response = httpclient.execute(get);
            in = new BufferedReader(new InputStreamReader(response.getEntity()  
	                .getContent(),"gbk"));  
	        StringBuffer sb = new StringBuffer("");  
	        String line = "";  
	        String NL = System.getProperty("line.separator"); 
	        while ((line = in.readLine()) != null) {  
	            sb.append(line + NL);  
	        }  
	        in.close();  
	        result = sb.toString(); 
	        String regEx="plugin.php[?]{1}id=dsu_amupper:pper&ajax=1&formhash=[0-9|a-z]{8}";
	        Pattern p=Pattern.compile(regEx);  
	        Matcher m=p.matcher(result);
	        while(m.find()){
	        	url="http://www.vi88.com/forum/"+m.group().toString();
	        }
		} catch (Exception e) {
            //log.error(e);
		}
		return url;
	}
	public void sign(String sign_url1){
		HttpGet get = new HttpGet(sign_url1);
		String result="";
    	BufferedReader in = null; 
    	HttpResponse response;
		try {
            response = httpclient.execute(get);
            in = new BufferedReader(new InputStreamReader(response.getEntity()  
	                .getContent(),"gbk"));  
	        StringBuffer sb = new StringBuffer("");  
	        String line = "";  
	        String NL = System.getProperty("line.separator"); 
	        while ((line = in.readLine()) != null) {  
	            sb.append(line + NL);  
	        }  
	        in.close();  
	        result = sb.toString(); 
	        
		} catch (Exception e) {
            //log.error(e);
		}
	}
    
}
2012年7月13日 16:59

1个答案 按时间排序 按投票排序

0 0

4.0以后要在oncreate里面添加
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectAll().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

2014年6月24日 17:14

相关推荐

    HttpClient实现POST GET和文件下载

    HttpClient是Apache基金会开发的一个HTTP客户端库...无论是简单的GET和POST请求,还是复杂的文件上传和下载,都可以通过其丰富的API来实现。在使用过程中,注意合理的错误处理和资源管理,可以提升代码的健壮性和效率。

    Http(get)请求数据Android Studio使用HttpClient

    总之,了解如何使用`HttpClient`进行GET请求是Android开发的基础技能,但随着技术的发展,建议学习和使用更现代的网络库,以提升应用的效率和维护性。在实际项目中,务必考虑兼容性和最佳实践,以确保应用程序的稳定...

    android httpclient文件上传 http协议post get方法向服务器传输数据

    通过学习和理解这些代码,开发者可以更好地掌握如何在Android应用中利用HTTPClient与服务器进行数据交互。 总结来说,本项目通过具体的代码示例,深入浅出地介绍了Android中HTTPClient的使用,包括GET和POST请求的...

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...

    httpclient发送post请求

    在Java开发中,HTTPClient库是一个非常常用的工具,用于执行HTTP请求...对于"post-demo"项目,你可以通过调试客户端应用,检查发送的数据是否正确,以及服务端接口是否正确处理了这些请求,以确保整个系统的正常运行。

    HttpClient模拟get,post请求并发送请求参数(json等)

    它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    HttpClient是Java中用于执行HTTP请求的一个强大库,它提供了丰富的功能,可以方便地进行GET、POST请求,并且能够处理复杂的网络交互,包括发送文件等操作。下面我们将详细讨论HttpClientUtil工具类如何实现这些功能...

    HttpClient发送http请求(post和get)需要的jar包+内符java代码案例+注解详解

    这个压缩包可能包含了实现HTTP GET和POST请求所需的jar包以及示例代码,帮助开发者理解如何使用HttpClient进行网络通信。下面将详细介绍HttpClient库,HTTP请求的基本概念,以及GET和POST方法的差异。 HttpClient是...

    httpclient用法,发送get和post请求,设置header

    httpclient的用法,发送get请求和post请求,设置header

    MFC的HttpClient的Get和Post方法

    本文将详细讲解如何在MFC中利用HttpClient进行GET和POST操作。 首先,我们需要理解HTTP协议的基本概念。HTTP(超文本传输协议)是一种应用层协议,用于在Web上交换各类数据。GET和POST是HTTP请求中最常见的两种方法...

    Android-HttpClient工具类简单轻松的实现getpostput和delete请求

    在Android开发过程中,网络请求是不可或缺的一部分,而`HttpClient`是一个强大的HTTP客户端库,它允许开发者执行各种HTTP操作,如GET、POST、PUT和DELETE。本篇文章将详细讲解如何使用`HttpClient`工具类来简化这些...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是,当我们需要使用HTTPS协议时,事情变得复杂起来。HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书...

    Android-Httpclient_Get_Post

    `HttpClient_Get_Post`这个压缩包可能包含了使用`HttpClient`发送GET和POST请求的Android代码示例,包括如何构造请求、设置参数、处理响应等内容。通过学习这些示例,开发者可以更好地理解和掌握`HttpClient`的用法...

    C#的http发送post和get请求源码

    - 在`FrmTestHttpPost`类中,可能会有一个按钮事件,当用户点击按钮时,调用`HttpClient`发送GET或POST请求。请求的结果可以通过`HttpResponseMessage`的`Content`属性读取,然后显示在窗体的某个控件上。 6. **...

    android 联网请求的两种方式HttpURLConnection和HttpClient

    在Android开发中,联网请求是应用与服务器交互的基础,用于获取或发送数据。常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **...

    HttpClient 发送get和post请求

    一个简单的易学的 基于HttpClient 4.3发送psot及get请求,返回数据,适合初学者,适合初学者

    httpclient4.0

    HttpClient 4.0 引入了异步操作模型,允许在请求执行时解耦等待响应的过程。通过 `Future&lt;HttpResponse&gt;` 对象,开发者可以在其他线程中处理响应,提高程序的并发性能。 六、HttpClient 4.0 在实际项目中的应用 ...

Global site tag (gtag.js) - Google Analytics