您的位置:首页 > 理论基础 > 计算机网络

Http通信

2015-06-02 18:30 239 查看
一.使用HttpURLConnection进行网络通信。HttpURLConnection类位于java.net包中,用于发送HTTP请求和获取HTTP响应,由于该类是抽象类,不能直接实例化对象,需要使用URL的openConnection()方法来获得。

1.使用HttpURLConnection发送GET请求。使用HttpURLConnection对象发送请求时,默认发送的就是GET请求。因此,发送GET请求比较简单,只是在指定连接地址时,先将要传递的参数通过“?参数名=参数值&参数名=参数值”等进行传递,然后获取流中的数据并关闭连接即可。

//使用HttpURLConnection发送GET请求(默认情况下HttpURLConnection使用GET请求)
public void HttpURLConnection_GET(){
//创建URL对象
try {
URL url = new URL("https://www.baidu.com/s?wd=你好");
//创建一个HTTP连接
try {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Toast.makeText(myHttpURLConnection.this, "HTPP连接成功!", Toast.LENGTH_SHORT).show();
//设置请求超时
urlConnection.setReadTimeout(2000);//2秒
//获取数据
<span>				</span>//断开连接
<span>				</span>urlConnection.disconnect();
} catch (IOException e) {
System.out.println("HTPP连接出错!");
Toast.makeText(myHttpURLConnection.this, "HTPP连接出错!", Toast.LENGTH_SHORT).show();
}
} catch (MalformedURLException e) {
System.out.println("URL不存在!");
Toast.makeText(myHttpURLConnection.this, "URL不存在!", Toast.LENGTH_SHORT).show();
}
}
2.由于采用GET秦秋发送请求只适合发送大小在1024个字节以内的数据,所以当要发送的数据比较大的时候,就需要使用POST方式来发送该请求。在Android中,使用HttpURLConnection类在发送请求时,默认采用的是GET请求,如果发送POST请求,需要通过setRequestMethod()方法进行制定。

其它方法:

setDoInput(boolean newvalue):用于设置是否向连接中写入数据,如果参数值为true,表示写入数据,否则不写入数据。

setDoOutput(boolean newvalue):用于设置是否从连接中读取数据,如果参数值为true时,表示读取数据,否则不读取数据。

setUseCaches(boolean newvalue):用于这是是否缓存数据,true表示缓存数据,否则表示禁用缓存。

setInstanceFollwRedirects(boolean followRedirects):用于设置是否应该自动执行http重定向,true表示自动执行,否则不自动执行。

setRequestProperty(String field,String newValue):用于设置一般请求属性,列列如,要设置内容类型为表单数据,可以进行一下设置setRequestProperty("Content-Type","application/x-www/form-urlencodesd")。

//使用HttpURLConnection发送POST请求
public void HttpURLConnection_POST(){
//要提交的地址
String target = "http://www.baidu.com/";
URL url;
try {
url = new URL(target);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();	//创建http连接
conn.setRequestMethod("POST");                                      //指定使用POST请求方式
conn.setDoInput(true);                                              //向连接中写入数据
conn.setDoOutput(true);                                             //从连接中读取数据
conn.setUseCaches(false);                                           //禁用缓存
conn.setInstanceFollowRedirects(true);                              //自动执行htpp重定向
conn.setRequestProperty("Content-Type",	"application/x-www-form-urlencoded");	//设置内容类型
//获取数据,此处省略
//判断是否响应成功
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){

}
conn.disconnect();    //断开连接
} catch (MalformedURLException e) {
System.out.println("URL不存在!");
Toast.makeText(myHttpURLConnection.this, "URL不存在!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
System.out.println("HTPP连接出错!");
Toast.makeText(myHttpURLConnection.this, "HTPP连接出错!", Toast.LENGTH_SHORT).show();
}
}
二.HttpURLConnection技术一般使用在到某个页面提交请求并获取服务器响应。不过,对于比较复杂的联网操作使用HttpURLConnection类就不一定能满足要求,这时,可以使用Apache组织提供的一个HttpClient项目实现。

1.发送GET请求。

//使用HttpClient的HttpGet类发送GET请求
public void HttpClient_GET(){
String target = "http://www.baidu.com/";
//创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
//创建httpgGet连接对象
HttpGet httpRequest = new HttpGet(target);
HttpResponse httpResponse;
try {
//执行HttpClient请求
httpResponse = httpClient.execute(httpRequest);
/*
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
//获取返回的字符串
String result = EntityUtils.toString(httpResponse.getEntity());
}else{
System.out.println("请求失败!");
Toast.makeText(myHttpURLConnection.this, "请求失败!", Toast.LENGTH_SHORT).show();
}*/
} catch (ClientProtocolException e) {
System.out.println("HttpClient请求失败!");
Toast.makeText(myHttpURLConnection.this, "HttpClient请求失败!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.发送POST请求

步骤: (1)创建HttpClient对象;

(2)创建HttpPOST对象;

(3)如果需要发送请求参数,可以调用HttpPOST的setParams或setEntity方法来添加请求参数;

(4)调用HttpClient对象的execute方法发送请求,执行该方法将返回一个HttpResponse对象;

(5)调用HttpResponse的getEntity方法,对获得包含了服务器响应内容的HttpEntity对象,通过该对象可以获取服务器的响应内容。

//使用HttpClient发送POST请求
public void HttpClient_POST(){
String target = "http://www.baidu.com/";
//创建HtppClient对象
HttpClient httpClient = new DefaultHttpClient();
//创建HttpPOST对象
HttpPost httpPost = new HttpPost(target);
//将要传递的参数保存到List集合中
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("param", "post"));	//标记参数
params.add(new BasicNameValuePair("nick_name", "昵称"));
//		HttpRequest.setEntity(new UrlEncodedFormEntity(params,"utf-8"));	//设置编码方式
try {
//执行HttpClient请求
HttpResponse httpResponse = httpClient.execute(httpPost);
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
String result = EntityUtils.toString(httpResponse.getEntity());	//获取返回的字符串
}else{
Toast.makeText(myHttpURLConnection.this, "HttpClient请求失败!", Toast.LENGTH_SHORT).show();
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: