get是从服务器上获取数据,post是向服务器传送数据get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。get安全性非常低,post安全性较高。但是执行效率却比Post方法好。get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
HTTP GET请求
package com.zhidi.httpget;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
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;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_username;
private EditText et_password;
private Button bt_show;
String result="";
/**get请求URL地址*/
private static final String URL="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
bt_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//android4.0后的新的特性,网络数据请求时不能放在主线程中。
//7、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//8、提示读取结果
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
};
// 启动线程来执行任务
new Thread() {
public void run() {
//请求网络
loginByGet(et_username.getText().toString(), et_password.getText().toString());
Message m = new Message();
m.what = 1;
// 发送消息到Handler
handler.sendMessage(m);
}
}.start();
}
});
}
private void init(){
et_username=(EditText)findViewById(R.id.et_username);
et_password=(EditText)findViewById(R.id.et_password);
bt_show=(Button)findViewById(R.id.bt_login);
}
/**
* 请求后台,判断登录结果。
* @param username
* @param password
*/
public void loginByGet(String username, String password) {
try {
//1、设置请求的地址。通过URLEncoder.encode(String s,"UTF-8")将字符串转换为UTF-8编码
String strUrl = URL
+"?username=" + URLEncoder.encode(username, "UTF-8")
+ "&password=" + URLEncoder.encode(password, "UTF-8");
//2、根据地址创建URL对象(网络访问的url)
URL url = new URL(strUrl);
//3、url.openConnection()打开网络链接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//4、获取响应的输入流对象
InputStreamReader is = new InputStreamReader(conn.getInputStream());
BufferedReader bufferedReader = new BufferedReader(is);
StringBuffer strBuffer = new StringBuffer();
String line = null;
//5、读取服务器返回信息
while ((line = bufferedReader.readLine()) != null) {
strBuffer.append(line);
}
result = strBuffer.toString();
//6、关闭InputStream、关闭http连接
is.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
HTTP POST请求
package com.zhidi.httppost;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
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;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText et_username;
private EditText et_password;
private Button bt_show;
String result="";
/**post请求URL地址*/
private static final String URL="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
bt_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//android4.0后的新的特性,网络数据请求时不能放在主线程中。
//9、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//8、提示读取结果
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
};
// 启动线程来执行任务
new Thread() {
public void run() {
//请求网络
loginByPost(et_username.getText().toString(), et_password.getText().toString());
Message m = new Message();
m.what = 1;
// 发送消息到Handler
handler.sendMessage(m);
}
}.start();
}
});
}
private void init(){
et_username=(EditText)findViewById(R.id.et_username);
et_password=(EditText)findViewById(R.id.et_password);
bt_show=(Button)findViewById(R.id.bt_login);
}
/**
* 请求后台,判断登录结果。
* @param username
* @param password
*/
public void loginByPost(String username, String password) {
try {
//1、根据地址创建URL对象(网络访问的url)
URL url = new URL(URL);
//2、url.openConnection()打开网络链接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//3、设置请求的方式
conn.setRequestMethod("POST");
conn.setDoInput(true);//发送POST请求必须设置允许输出
conn.setDoOutput(true);//发送POST请求必须设置允许输入
//4、设置请求的头
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Charset", "utf-8");
String data = "username=" + URLEncoder.encode(username, "UTF-8")
+ "&password=" + URLEncoder.encode(password, "UTF-8");//传递的数据
conn.setRequestProperty("Content-Length",String.valueOf(data.getBytes().length));
//5、获取输出流
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
os.flush();
//6、获取响应的输入流对象
InputStreamReader is = new InputStreamReader(conn.getInputStream());
BufferedReader bufferedReader = new BufferedReader(is);
StringBuffer strBuffer = new StringBuffer();
String line = null;
//7、读取服务器返回信息
while ((line = bufferedReader.readLine()) != null) {
strBuffer.append(line);
}
result = strBuffer.toString();
//8、关闭InputStream、关闭http连接
is.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
HttpClientGet请求
package com.zhidi.httpclientget;
import java.net.URLEncoder;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
* HttpClient get
* @author Administrator
*/
public class MainActivity extends Activity {
private EditText et_username;
private EditText et_password;
private Button bt_show;
String result="";
/**get请求URL地址*/
private static final String URL="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
bt_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//android4.0后的新的特性,网络数据请求时不能放在主线程中。
//7、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//8、提示读取结果
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
};
// 启动线程来执行任务
new Thread() {
public void run() {
//请求网络
loginByHttpClientGet(et_username.getText().toString(), et_password.getText().toString());
Message m = new Message();
m.what = 1;
// 发送消息到Handler
handler.sendMessage(m);
}
}.start();
}
});
}
private void init(){
et_username=(EditText)findViewById(R.id.et_username);
et_password=(EditText)findViewById(R.id.et_password);
bt_show=(Button)findViewById(R.id.bt_login);
}
/**
* 请求后台,判断登录结果。
* @param username
* @param password
*/
public void loginByHttpClientGet(String username,String password) {
//1、创建 HttpClient的实例
HttpClient httpClient = new DefaultHttpClient();
try {
//2、创建某种连接方法的实例,在这里是HttpGet。
String strUrl = URL
+"?username=" + URLEncoder.encode(username, "UTF-8")
+ "&password=" + URLEncoder.encode(password, "UTF-8");
HttpGet httpGet = new HttpGet(strUrl);
//3、获取HttpResponse实例
HttpResponse httpResp = httpClient.execute(httpGet);
//4、判断是否能够请求成功
if(httpResp.getStatusLine().getStatusCode()==200){
//5、获取返回的数据
result = EntityUtils.toString(httpResp.getEntity(),"UTF-8");
} else {
Log.i("HttpClientGet", "HttpGet方式请求失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 6、释放连接。无论执行方法是否成功,都必须释放连接
httpClient.getConnectionManager().shutdown();//释放链接
}
}
}
HttpClientPost请求
package com.zhidi.httpclientpost;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
* HttpClient post
* @author Administrator
*/
public class MainActivity extends Activity {
private EditText et_username;
private EditText et_password;
private Button bt_show;
String result="";
/**post请求URL地址*/
private static final String URL="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
bt_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//android4.0后的新的特性,网络数据请求时不能放在主线程中。
//8、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//9、提示读取结果
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
};
// 启动线程来执行任务
new Thread() {
public void run() {
//请求网络
loginByHttpClientPost(et_username.getText().toString(), et_password.getText().toString());
Message m = new Message();
m.what = 1;
// 发送消息到Handler
handler.sendMessage(m);
}
}.start();
}
});
}
private void init(){
et_username=(EditText)findViewById(R.id.et_username);
et_password=(EditText)findViewById(R.id.et_password);
bt_show=(Button)findViewById(R.id.bt_login);
}
/**
* 请求后台,判断登录结果。
* @param username
* @param password
*/
public void loginByHttpClientPost(String username,String password) {
//1.创建 HttpClient的实例
HttpClient httpClient = new DefaultHttpClient();
try {
//2、创建某种连接方法的实例,在这里是HttpPost。
HttpPost httpPost = new HttpPost(URL);
//3、封装传递参数的集合
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("username", username));//往这个集合中添加你要传递的参数
parameters.add(new BasicNameValuePair("password", password));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");//创建传递参数封装 实体对象,设置传递参数的编码
httpPost.setEntity(entity);//把实体对象存入到httpPost对象中
//4、调用HttpClient实例的execute方法来执行创建好的method实例
HttpResponse httpResp = httpClient.execute(httpPost);
//5、判断是否能够请求成功
if(httpResp.getStatusLine().getStatusCode()==200){
//6、获取返回的数据
result = EntityUtils.toString(httpResp.getEntity(),"UTF-8");
} else {
Log.i("HttpClientPost", "HttpPost方式请求失败");
}
}catch (Exception e) {
e.printStackTrace();
}finally {
// 7、释放连接。无论执行方法是否成功,都必须释放连接
httpClient.getConnectionManager().shutdown();//释放链接
}
}
}