一.HTTP协议
1.超文本传输协议
2.支持客户端/服务器端模式
3.内容
1-请求协议
1>请求报文格式
1>-请求行:请求方式 请求资源名 协议版本号;
2>-请求消息头
3>-请求体
2>请求方式
1>-POST:请求内容在请求体里,以键=值的形式,键值对之间用&间隔;长度不受限制,保密性高。
2>-GET:请求内容在URL后面用?开始,以键=值的形式,键值对之间用&间隔;请求报文没有请求体;请求数据的长度受到浏览器的限制;请求数据保密性低。
2-响应协议:响应报文格式
1>响应状态行:描述服务器处理结果;响应状态码为200成功。
2>响应消息头
3>响应体
二.方式
1.JDK方式
2.Android方式
3.框架方式
JDK的get请求方式 代码
先设置网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.hanqi.testapp3.TestActivity3" 11 android:orientation="vertical"> 12 13 <Button 14 android:layout_width="match_parent" 15 android:layout_height="wrap_content" 16 android:text="JDK-Get方式" 17 android:onClick="bt1_OnClick"/> 18 19 <EditText 20 android:layout_width="match_parent" 21 android:layout_height="200dp" 22 android:id="@+id/et_2"/> 23 24 </LinearLayout>
1 package com.hanqi.testapp3; 2 3 import android.app.ProgressDialog; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.EditText; 8 import android.widget.Toast; 9 10 import java.io.InputStream; 11 import java.net.HttpURLConnection; 12 import java.net.URL; 13 14 public class TestActivity3 extends AppCompatActivity { 15 16 17 EditText et_2; 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_test3); 23 24 et_2=(EditText)findViewById(R.id.et_2); 25 } 26 27 //JDK的Get方式 28 public void bt1_OnClick(View v) 29 { 30 //1.进度对话框 31 final ProgressDialog progressDialog = ProgressDialog.show(this,null,"正在加载,请稍后..."); 32 33 //2.开启子线程,访问网络 34 new Thread(){ 35 public void run() 36 { 37 try { 38 //1.URL 39 URL url = new URL(et_2.getText().toString() + "?name=tom"); 40 41 //2.URL获取连接 42 HttpURLConnection huc = (HttpURLConnection) url.openConnection(); 43 44 //请求方式 45 huc.setRequestMethod("GET"); 46 47 //设置超时 48 huc.setConnectTimeout(3000); 49 huc.setReadTimeout(3000); 50 51 //连接并发送请求 52 huc.connect(); 53 54 //接收 55 //判断返回状态码 200 56 int code = huc.getResponseCode(); 57 58 if (code == 200) { 59 //接收数据 60 //输入流 61 InputStream is = huc.getInputStream(); 62 63 //读取流 64 65 //1.byte数组 66 byte[] b = new byte[1024]; 67 68 //2.读到数组的长度 69 int i = 0; 70 71 //3.数据 72 final StringBuilder sbl = new StringBuilder(); 73 74 while ((i = is.read(b)) > 0) { 75 sbl.append(new String(b, 0, i)); 76 } 77 78 //释放资源 79 is.close(); 80 huc.disconnect(); 81 82 //通过主线程显示信息和关闭对话框 83 runOnUiThread(new Runnable() { 84 @Override 85 public void run() { 86 et_2.setText(sbl); 87 88 progressDialog.dismiss(); 89 } 90 }); 91 } else { 92 Toast.makeText(TestActivity3.this, "连接错误,返回的状态码=" + code, Toast.LENGTH_SHORT).show(); 93 } 94 } 95 catch (Exception e) 96 { 97 e.printStackTrace(); 98 99 progressDialog.dismiss(); 100 } 101 } 102 }.start(); 103 } 104 }