第二十章之HttpClient请求
2014-11-13 22:47
141 查看
Http工作的大致原理:
①客户端连接到Web服务器
②发送HTTP请求
③服务器接受请求并返回HTTP响应
④释放连接TCP连接
⑤客户端浏览器解析HTML内容
⑥客户端与服务端断开连接
步骤:
①创建一个类继承Thread
List<NameValuePair> parameters=new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("name","张三"));
②创建HttpClien请求执行t实例 HttpClient client=new DefaultHttpClient();
③设置请求方式
HttpPost request=new HttpPost("..................");
④绑定参数
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(parameters);
将绑定的参数设置到请求对象当中
request.setEntity(entity);
HttpResponse response=client.excute(request);
if(response.getStatusLine().getStatusCode() == 200){
//获取服务器端的数据
String str = EntityUtils.toString(response.getEntity());
//从消息池中获取消息对象。
Message msg = handler.obtainMessage();
//创建数据存放对象
Bundle bundle = new Bundle();
bundle.putString("name", str);
//把数据对象放到消息对象当中
msg.setData(bundle);
//将消息对象发送到消息队列
handler.sendMessage(msg);
}
上课案例
MainActivity.java
①客户端连接到Web服务器
②发送HTTP请求
③服务器接受请求并返回HTTP响应
④释放连接TCP连接
⑤客户端浏览器解析HTML内容
⑥客户端与服务端断开连接
步骤:
①创建一个类继承Thread
List<NameValuePair> parameters=new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("name","张三"));
②创建HttpClien请求执行t实例 HttpClient client=new DefaultHttpClient();
③设置请求方式
HttpPost request=new HttpPost("..................");
④绑定参数
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(parameters);
将绑定的参数设置到请求对象当中
request.setEntity(entity);
HttpResponse response=client.excute(request);
if(response.getStatusLine().getStatusCode() == 200){
//获取服务器端的数据
String str = EntityUtils.toString(response.getEntity());
//从消息池中获取消息对象。
Message msg = handler.obtainMessage();
//创建数据存放对象
Bundle bundle = new Bundle();
bundle.putString("name", str);
//把数据对象放到消息对象当中
msg.setData(bundle);
//将消息对象发送到消息队列
handler.sendMessage(msg);
}
上课案例
MainActivity.java
package com.ryan.lsn3_18; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; 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.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button start_btn; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //获取子线程传递来的数据 Bundle bundle = msg.getData(); //根据键获取值 String name = bundle.getString("name"); //更新按钮的文本 start_btn.setText(name); super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } public void initView(){ start_btn = (Button)findViewById(R.id.start_btn); start_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // MyThread thread = new MyThread(); //启动 线程 // thread.start(); //创建线程对象 DemoThread thread = new DemoThread(); //启动线程 thread.start(); } }); } class DemoThread extends Thread{ @Override public void run() { List<NameValuePair> parameters = new ArrayList<NameValuePair>(); parameters.add(new BasicNameValuePair("name", "张三")); parameters.add(new BasicNameValuePair("password", "123456")); try { //请求执行对象 HttpClient client = new DefaultHttpClient(); //设置请求方式 HttpPost request = new HttpPost("http://10.0.2.2:8080/MyServer/DemoServlet"); //绑定参数 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters); //将绑定的参数设置到请求对象当中 request.setEntity(entity); //执行请求 HttpResponse response = client.execute(request); //判断连接是否成功,连接成功为200 if(response.getStatusLine().getStatusCode() == 200){ //获取服务器端的数据 String str = EntityUtils.toString(response.getEntity()); //从消息池中获取消息对象。 Message msg = handler.obtainMessage(); //创建数据存放对象 Bundle bundle = new Bundle(); bundle.putString("name", str); //把数据对象放到消息对象当中 msg.setData(bundle); //将消息对象发送到消息队列 handler.sendMessage(msg); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class MyThread extends Thread{ @Override public void run() { try { String stu = ""; //构造请求地址 URL url = new URL("http://10.0.2.2:8080/MyServer/DemoServlet"); //打开连接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置服务器可读 conn.setDoInput(true); //设置连接超时 conn.setConnectTimeout(5000); //设置请求方式 conn.setRequestMethod("POST"); //请求连接 conn.connect(); //判断是否连接成狗 if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ //获取服务器端的输入流 InputStream is = conn.getInputStream(); //读取服务器端的数据 byte []buffer = new byte[1024]; int length =0; while((length = is.read(buffer)) != -1){ stu = new String(buffer, 0, length); } } //从消息池中获取消息对象。 Message msg = handler.obtainMessage(); //创建数据存放对象 Bundle bundle = new Bundle(); bundle.putString("name", stu); //把数据对象放到消息对象当中 msg.setData(bundle); //将消息对象发送到消息队列 handler.sendMessage(msg); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }
相关文章推荐
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- httpclient post请求,需要登录的地址
- Android Asynchronous Http Client-Android异步网络请求客户端接口
- Android 异步请求类库Async_Http_Client的使用方法
- HttpClient 之 4.x.x版本以上的发送Https请求
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- HttpClient、HttpUrlConnection请求数据的方式
- Android http 请求——AsyncHttpClient集成【解决重定向问题、setEnableRedirects 方法异常、线程中调用异常问题】
- go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置
- HttpClient远程post请求接口工具类(网上查找部分修改,不算严格原创)
- OKHttpClient的POST请求
- Java--org.apache.http.client的HttpClient发送Post请求,获取返回Header
- android通过httpClient请求获取JSON数据并且解析
- java apache commons HttpClient发送get和post请求的学习整理
- httpclient发送post请求
- 用httpclient发送https协议请求以及javax.net.ssl.SSLHandshakeException解决办法
- httpclient网络请求数据
- android_30_使用HttpClient发送Get和Post请求
- 请求数据—HttpClient