JAVA实现对服务器的访问:
- -
GET
HttpURLConnection HttpClient
POST
HttpClient为例
GET
一、 HttpURLConnection
步骤:
1.指定数据的网路路径
URL url=new URL(“http://localhost:8080/..../....”);
2.打开连接,返回一个HttpURLConnection类型对象,对返回对象进行强转。
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
3.设置连接参数
conn.setRequestMethod(“SET”);//这里有SET和GET两种方法。见下一篇博客。conn.setReadTimeout(5000);//设置响应时间,不然程序在等不到返回值时会一致等待。conn.setDoInput(true);//打开读取的管道conn.setDoOutput(true);//打开网服务器写数据的通道。良好的变成习惯建议两个都设置好。
4.判断网络请求返回码是否可以访问
if(conn.getResponseCode==200){ //如果返回码==200,执行下载操作 //获得读取流 InputStream is=conn.getInputStream(); //然后可以写入内存, ByteArrayOutputStream baos=newByteArrayOutputStream();//也可以写入本地FileOutputStream fos=new FileOutputStream(“本地地址”);byte b[]=new byte[];int a=0;//a为写入b[]数组的长度。while((a=is.read(b))!=-1)//假设以-1结尾。{ fos.write(b,0,a); fos.flush();}Sytem.out.println(“下载成功!”);}
二、 HttpClient(第三方库)
由于步骤类似,下面加入端口回调和线程实现
步骤:
public interface CallBack{ public void load(byte b[])’}public static void getMessage(final String path,final CallBackcallback){ new Thread(new Runnable(){ public void run(){ HttpClient client=newDefaultClient(); //获得get请求 HttpGet get=new HttpGet(path); //执行get请求,返回响应对象 HttpResponseres=client.execute(get); //判断网络返回码 if(res.getStatusLine().getStatusCode()==200){ //获得实体对象 HttpEntityentity=res.getEntity(); //返回字节数组 byteb[]=EntityUtils.toByteArray(entity); callback.load(b); } } }).start();}public static void main(String args[]){ String path=””; HttpUtils uilt=newHttpUtils(); util.getMessage(path,newCallBack(){ public void load(byteb[]) { //获取字节流 } });}
POST
public staticvoid getStringPost(final String path,fina CallBack callback){ new Thread(new Runnable(){ HttpClient client =newDefaultHttpClient(); HttpPost post=new HttpPost(path); //封装键值对 NameValuePair p1=new BasicNameValuePair(“username”,”admin”); NameValuePair p2=new BasicNameValuePair(“password”,”123”); Listp2=newArrayList (); list.add(p1); list.add(p2); //将集合转成HttpEntity对象 HttpEntity entity=new UrlEncodedFormEntity(list); post.setEntity(entity); //执行post HttpResponse res=client.execute(post); //判断返回码 if(res.getStatusLine().getStatusCode()==200) { // 获得字节流信息 //调用接口}}).start();}
GET请求传值时候会在URL里显示。
POST请求将数据封装到NameValuePair里,再把NameValuePair传入集合,封装成entity进行传输。