Http通信

来源:互联网 发布:便携式打印机 知乎 编辑:程序博客网 时间:2024/05/29 19:17

一.使用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 blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}





0 0
原创粉丝点击