-
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个答案 按时间排序 按投票排序
-
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是Apache基金会开发的一个HTTP客户端库...无论是简单的GET和POST请求,还是复杂的文件上传和下载,都可以通过其丰富的API来实现。在使用过程中,注意合理的错误处理和资源管理,可以提升代码的健壮性和效率。
总之,了解如何使用`HttpClient`进行GET请求是Android开发的基础技能,但随着技术的发展,建议学习和使用更现代的网络库,以提升应用的效率和维护性。在实际项目中,务必考虑兼容性和最佳实践,以确保应用程序的稳定...
通过学习和理解这些代码,开发者可以更好地掌握如何在Android应用中利用HTTPClient与服务器进行数据交互。 总结来说,本项目通过具体的代码示例,深入浅出地介绍了Android中HTTPClient的使用,包括GET和POST请求的...
### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...
在Java开发中,HTTPClient库是一个非常常用的工具,用于执行HTTP请求...对于"post-demo"项目,你可以通过调试客户端应用,检查发送的数据是否正确,以及服务端接口是否正确处理了这些请求,以确保整个系统的正常运行。
它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...
HttpClient是Java中用于执行HTTP请求的一个强大库,它提供了丰富的功能,可以方便地进行GET、POST请求,并且能够处理复杂的网络交互,包括发送文件等操作。下面我们将详细讨论HttpClientUtil工具类如何实现这些功能...
这个压缩包可能包含了实现HTTP GET和POST请求所需的jar包以及示例代码,帮助开发者理解如何使用HttpClient进行网络通信。下面将详细介绍HttpClient库,HTTP请求的基本概念,以及GET和POST方法的差异。 HttpClient是...
httpclient的用法,发送get请求和post请求,设置header
本文将详细讲解如何在MFC中利用HttpClient进行GET和POST操作。 首先,我们需要理解HTTP协议的基本概念。HTTP(超文本传输协议)是一种应用层协议,用于在Web上交换各类数据。GET和POST是HTTP请求中最常见的两种方法...
在Android开发过程中,网络请求是不可或缺的一部分,而`HttpClient`是一个强大的HTTP客户端库,它允许开发者执行各种HTTP操作,如GET、POST、PUT和DELETE。本篇文章将详细讲解如何使用`HttpClient`工具类来简化这些...
在实际项目中,我们经常需要使用HttpClient来发送POST请求,以便与服务器进行数据交换。但是,当我们需要使用HTTPS协议时,事情变得复杂起来。HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书...
`HttpClient_Get_Post`这个压缩包可能包含了使用`HttpClient`发送GET和POST请求的Android代码示例,包括如何构造请求、设置参数、处理响应等内容。通过学习这些示例,开发者可以更好地理解和掌握`HttpClient`的用法...
- 在`FrmTestHttpPost`类中,可能会有一个按钮事件,当用户点击按钮时,调用`HttpClient`发送GET或POST请求。请求的结果可以通过`HttpResponseMessage`的`Content`属性读取,然后显示在窗体的某个控件上。 6. **...
在Android开发中,联网请求是应用与服务器交互的基础,用于获取或发送数据。常见的联网请求方式有两种:HttpURLConnection和HttpClient。下面将详细讲解这两种方法,以及它们如何处理POST和GET请求。 **...
一个简单的易学的 基于HttpClient 4.3发送psot及get请求,返回数据,适合初学者,适合初学者
HttpClient 4.0 引入了异步操作模型,允许在请求执行时解耦等待响应的过程。通过 `Future<HttpResponse>` 对象,开发者可以在其他线程中处理响应,提高程序的并发性能。 六、HttpClient 4.0 在实际项目中的应用 ...