Http编程

来源:互联网 发布:sony系统下载软件 编辑:程序博客网 时间:2024/05/17 21:41

1 Http编程

】HttpURLConnection(api提供)
】HttpClient

HttpURLConnecdtion使用步骤
a 确定资源地址
String path=”http://localhost:8080/web01/a.bmp”;

b 把地址封装成URL(统一资源定位符)
URL url=new URL(path);

c 创建程序与资源的连接
HttpURLConnection con=(HttpURLConnection) url.openConnection();

d 设置请求方式get、post
con.setRequestMethod(“GET”);

e 设置输入,输出操作
con.setDoInput(true);

f 打开连接
con.connect();

g 根据返回的状态码,进行读写操纵(200表示成功)
if(con.getResponseCode()==200){//状态码200代表访问成功
//获取返回的资源流
InputStream in=con.getInputStream();

          //读取操作          byte[] b=new byte[100];          int len=0;          while((len=in.read(b))!=-1){          }

附: con.getContentLength()//获取数据字节长度,可用于带进度条的下载操作

2 get和post请求都可以请求数据和发送数据,
】发送数据时最好用post方式,因为post方式将数据封装成流发送给服务器,比较安全
】get方式请求时,输入的参数会在url上以键值对的形式展现出来,不安全,而且大小有限制(假如输入账号 密码进行请求服务器的数据,密码就会被显示到url上)

】HttpURLConnection get方式

package com.kk;import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class GetImage {    public static void main(String[] args) {        try {            //资源地址            String path="http://localhost:8080/web01/a.bmp";            //设置URL            URL url=new URL(path);            //创建与资源的连接            HttpURLConnection con=(HttpURLConnection) url.openConnection();            //设置请求方式            con.setRequestMethod("GET");            //设置输入操作            con.setDoInput(true);            //打开连接            con.connect();          if(con.getResponseCode()==200){//状态码200代表访问成功              //获取返回的资源流              InputStream in= con.getInputStream();              FileOutputStream out=new FileOutputStream(new File("c:/my.bmp"));              //读取操作              byte[] b=new byte[100];              int len=0;              while((len=in.read(b))!=-1){                  //写到文件中                  out.write(b,0,len);              }          }        } catch (Exception e) {            System.out.println("又一场");            e.printStackTrace();        }    }}**post 发送数据**

public class Post {

public static void main(String[] args) {    String path="http://localhost:8080/web01/a.bmp";    String data="userName=kkk&password=123456";    try {        URL url=new URL(path);        //与服务器建立连接        HttpURLConnection con=(HttpURLConnection) url.openConnection();        //设置请求方式        con.setRequestMethod("POST");        //设置输入输出操作        con.setDoInput(true);        con.setDoOutput(true);        con.connection();        //得到输出流    OutputStream out=con.getOutputStream();    //向服务器发送数据    out.write(data.getBytes());    } catch (Exception e) {        e.printStackTrace();    }}

}
】HttpClient get方式

package httpclient;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.http.HttpEntity;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;public class Main {    public static void main(String[] args) {        String path="http://localhost:8080/web01/a.bmp";        //创建客户端        HttpClient client=new DefaultHttpClient();        //设置get请求        HttpGet get=new HttpGet(path);        //请求数据,得到响应        try {            HttpResponse response=client.execute(get);            //判断返回码            if(response.getStatusLine().getStatusCode()==200){                //获取数据实体(图片、xml、json、String等)                //获取数据第一中方式                EntityUtils.toByteArray(response.getEntity());                //获取数据第二种方式                HttpEntity entity=response.getEntity();                InputStream in =entity.getContent();                OutputStream out=new FileOutputStream(new File("c:/kk.png"));                byte b[]=new byte[1024];                int len=0;                while((len=in.read(b))!=-1){                    out.write(b,0,len);                }                in.close();                out.close();            }        } catch (Exception e) {            e.printStackTrace();        }    }}

】HttpClient post方式

package com.qf.httpclient;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;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;//使用httpPost,上传数据进行登录验证public class Demo03 {    public static void main(String[] args) {        String path = "http://localhost:8080/day27/LoginServlet";        HttpClient client = new DefaultHttpClient();        HttpPost post = new HttpPost(path);        try {            // 发送数据,以实体的形式发送数据            // 创建名值对            NameValuePair p1 = new BasicNameValuePair("username", "admin");            NameValuePair p2 = new BasicNameValuePair("password", "123456");            // 创建集合,存储名值对            List<NameValuePair> list = new ArrayList<NameValuePair>();            list.add(p1);            list.add(p2);            // 创建实体,封装名值对的集合            HttpEntity entity = new UrlEncodedFormEntity(list);            // 给post请求设置实体,实体封装了发送的数据            post.setEntity(entity);            HttpResponse res = client.execute(post);            if (res.getStatusLine().getStatusCode() == 200) {                System.out.println(EntityUtils.toString(res.getEntity()));            }        } catch (ClientProtocolException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击