`

Http协议编程

阅读更多

     今天学习了Http协议编程,以前听过一些,今天又拓宽了一下。

     首先,有两种方式:

      1.java 接口

      2.apache接口

     先来演示下java 接口编程:

     (1)通过http,get请求从服务器取得数据

     

public class Java_Get {
   public static String URL_PATH ="http://192.168.1.104:8080/MyHttp/logo1.jpg" ;
   /**
    * 获得服务器端的数据以输入流返回
    * @return
    */
	public static InputStream getInputStream(){
		
		InputStream inputStream = null ;
		try {
			//创建URL对象
			URL url = new URL(URL_PATH);
			if(url!=null){
			//取得HttpsURLConnection连接对象
			HttpURLConnection httpURLConnection =	(HttpURLConnection) url.openConnection() ;
			//设置连接网络超时时间,超过3秒自动断开
			httpURLConnection.setConnectTimeout(3000) ;
			//将 doInput 标志设置为 true,指示应用程序要从 URL 连接读取数据。 
			httpURLConnection.setDoInput(true) ;
			//将 doOutput 标志设置为 true,指示应用程序要将数据写入 URL 连接。 
			httpURLConnection.setRequestMethod("GET") ;
			int responseCode = httpURLConnection.getResponseCode() ;
			//判断是否正常返回数据
			if(responseCode == HttpURLConnection.HTTP_OK){
				//从服务器获得输入流
				inputStream = httpURLConnection.getInputStream() ;
			}
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return inputStream ;
	}
	/**
	 * 将从服务器读到的图片存储在本地
	 */
	public static void  saveImage(){
		InputStream inputStream = getInputStream()  ;
		byte[] data = new byte[1024] ;
		FileOutputStream fileOutputStream =  null ;
		int len = 0 ;
		//图片小于1024个字节
		try {
			fileOutputStream = new FileOutputStream("D:\\ee.jpg") ;
			while ((len = inputStream.read(data)) != -1) {
				fileOutputStream.write(data,0,len) ;
			}
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			if(inputStream!=null){
				try {
					inputStream.close() ;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(fileOutputStream!=null){
				try {
					fileOutputStream.close() ;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	public static void main(String[] args) {
		//从服务器获取图片保存到本地
		saveImage() ;
	}
}

     (2)通过http,post从服务器取得数据

  

public class Java_Post {
	private static String URL_PATH = "http://192.168.1.104:8080/MyHttp/LoginServlet";
	private static URL url;
	// 静态块实例化
	static {
		try {
			url = new URL(URL_PATH);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @param params
	 *            填入url的参数
	 * @param encode
	 *            字节编码
	 * @return
	 */
	public static String sendPostMessage(Map<String, String> params,
			String encode) {
		StringBuffer stringBuffer = new StringBuffer();
		if (params != null && !params.isEmpty()) {
			try {
				for (Map.Entry<String, String> entry : params.entrySet()) {
					stringBuffer
							.append(entry.getKey())
							.append("=")
							.append(URLEncoder.encode(entry.getValue(), encode))
							.append("&");
				}
			stringBuffer.deleteCharAt(stringBuffer.length()-1) ;
			HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection() ;
			urlConnection.setConnectTimeout(3000) ;
			urlConnection.setDoInput(true) ;
			urlConnection.setDoOutput(true) ;
			//获得上传信息的字节大小以及长度
			byte[] data = stringBuffer.toString().getBytes() ;
			//设置请求的类型为文本类型
			urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded") ;
			urlConnection.setRequestProperty("Content-Length", String.valueOf(data.length)) ;
		    OutputStream outputStream = urlConnection.getOutputStream() ;
		    outputStream.write(data) ;
		    int responseCode = urlConnection.getResponseCode() ;
		    if(responseCode == HttpURLConnection.HTTP_OK){
		    return changeInputStream(urlConnection.getInputStream(),encode) ;
		    }
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
      
		return "";
	}
        /**
        * 将读到的流转化为字符串
        * @param inputStream
        * @param encode
        * @return
        */
	private static String changeInputStream(InputStream inputStream,String encode) {
		// TODO Auto-generated method stub
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream() ;
		byte[] data = new byte[1024] ;
		int len = 0 ;
		String result = "" ;
		try {
			if(inputStream!=null){
				while((len = inputStream.read(data))!=-1){
					outputStream.write(data, 0, len) ;
				}
				result = new String(outputStream.toByteArray(),encode) ;
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}

	public static void main(String[] args) {
          Map<String,String> map = new HashMap<String,String>() ;
          map.put("username", "再_见孙悟空") ;
          map.put("userpwd", "AMB") ;
         String text = sendPostMessage(map,"utf-8");
         System.out.println(text); 
	}
}

  

 

 

 2.apache ,post从服务器取得数据

  

public class Apache_Http {
    /**
     * 取得从服务器返回信息
     * @param path : 地址
     * @param map : 传递的信息
     * @param encode : 编码
     * @return
     */
	public static String sendHttpPost(String path, Map<String,String> map,
			String encode) {
        List<NameValuePair> list = new ArrayList<NameValuePair>() ;
        if(map!=null && !map.isEmpty()){
        	for(Map.Entry<String,String> entry : map.entrySet())
        	list.add(new BasicNameValuePair(entry.getKey(), entry.getValue())) ;
        }
        //将请求的参数封装到表单中
        try {
			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,encode) ;
		   HttpPost httpPost = new HttpPost(path) ;
		   httpPost.setEntity(entity) ;
		   DefaultHttpClient client = new DefaultHttpClient() ;
		   HttpResponse httpResponse = client.execute(httpPost) ;
		   if(httpResponse.getStatusLine().getStatusCode()==HttpURLConnection.HTTP_OK){
			 return changeInputStream( httpResponse.getEntity().getContent() ,encode);//得到输入流
		   }
        } catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "" ;
	}
	/**
	 * 将读到的流转化为字符串
	 * @param inputStream
	 * @param encode
	 * @return
	 */
	private static String changeInputStream(InputStream inputStream,String encode) {
		// TODO Auto-generated method stub
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream() ;
		byte[] data = new byte[1024] ;
		int len = 0 ;
		String result = "" ;
		try {
			if(inputStream!=null){
				while((len = inputStream.read(data))!=-1){
					outputStream.write(data, 0, len) ;
				}
				result = new String(outputStream.toByteArray(),encode) ;
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}
	public static void main(String[] args) {
		String URL_PATH = "http://192.168.1.104:8080/MyHttp/LoginServlet";
		Map<String,String> map = new HashMap<String,String>() ;
        map.put("username", "再_见孙悟空") ;
        map.put("userpwd", "AMB") ;
       String text = sendHttpPost(URL_PATH,map,"utf-8");
       System.out.println(text);
	}
}

 


 

  • 大小: 15 KB
  • 大小: 3.3 KB
分享到:
评论

相关推荐

    老罗Android视频开发教程 android之http协议编程代码

    在Android应用开发中,HTTP协议编程是至关重要的一个环节,特别是在进行网络通信时。老罗的这个Android视频教程深入浅出地讲解了如何在Android环境中使用HTTP协议进行数据交互,对于初学者和有一定经验的开发者来说...

    老罗android视频开发源码和ppt--android之http协议编程.rar

    在Android应用开发中,HTTP协议编程是一个至关重要的环节,它涉及到客户端如何与服务器进行数据交互。"老罗android视频开发源码和ppt--android之http协议编程.rar"这个压缩包包含的资源,很显然是为了帮助开发者深入...

    HTTP协议编程 VC++6.0

    在VC++6.0环境下进行HTTP协议编程,主要是利用Winsock API或者更高层次的库来实现。 **一、Winsock API** Winsock是Windows操作系统提供的一个应用程序接口(API),用于实现TCP/IP协议栈。在VC++6.0中,我们首先...

    老罗Android开发视频教程汇总

    教程名称:老罗Android开发视频教程汇总课程目录:【】android之http协议编程第1集:http协议的介绍【】android之http协议编程第2集:http协议GET方式获取图片【】android之http协议编程第3集:使用Post方式进行提交...

    UPnP协议编程实践

    本文首先介绍协议的工作过程,包括协议的一般模型,以及与HTTP协议之间的关系,然后介绍HTTP协议的基本知识,主要介绍在简单服务发现协议中使用的一些协议请求和响应的消息格式。最后详细介绍协议的设备通知和设备...

    协议Java编程

    除此之外,还有HTTP(超文本传输协议)用于Web服务,FTP(文件传输协议)用于文件传输,以及SMTP(简单邮件传输协议)用于电子邮件等。 “编程”则涉及到编写和执行计算机程序的过程。Java编程语言是一种面向对象、...

    VC++_应用层协议及编程实例

    HTTP协议是互联网上应用最广泛的应用层协议之一,主要用于Web浏览器和服务器之间的通信。在VC++中实现HTTP客户端,你需要理解HTTP请求的构造,包括GET、POST方法的使用,以及头信息的设置。同时,理解HTTP响应的解析...

    TCP/IP协议编程

    TCP/IP协议编程是网络通信的基础,对于任何涉及网络应用开发的程序员来说,理解和掌握这一领域至关重要。本教程适合初学者,旨在深入浅出地介绍TCP/IP协议及其在编程中的应用,特别是通过socket进行网络通信的方法。...

    武汉网盾培训《网络通讯协议编程》教材部分书稿

    本书包括TCP \ UDP \ ICMP \ HTTP \ FTP \ POP3 \ SMTP等多种协议的讲解及c#示例代码(VS2005) 本书是学习网络知识和网路通讯协议编程的入门教材 关于RFC部分简略(可以自己去看RFC官网)

    UDP协议通信socket编程(物联网).rar

    调研http协议、TCP协议、UDP协议及socket编程相关知识;根据课程设计要求,选择合适的操作系统、开发环境及测试环境 必需有界面窗口,客户端可以实现网址的录入,协议的选择(TCP或返回信息的显示。服务器端要有...

    网络环境下的c编程技巧及实例

    6. **HTTP协议编程**:如果要在网络环境下处理HTTP请求,需要理解HTTP协议的基本结构,包括请求方法(GET, POST等)、状态码和头部信息。可以使用libcurl库简化HTTP操作。 7. **安全编程**:在网络环境中,安全问题...

    VxWorks网络协议栈编程指南

    《VxWorks网络协议栈编程指南》是一本深入探讨如何在VxWorks操作系统中进行网络协议栈编程的专业书籍。VxWorks,由Wind River Systems开发,是一款广泛应用在嵌入式系统的实时操作系统,以其高效、稳定和强大的网络...

    C编程实现http协议

    标题与描述中的关键词“C编程实现http协议”,指向了一个核心主题——如何利用C语言来实现HTTP协议,从而创建一个能够从互联网下载资源的简单客户端。HTTP(HyperText Transfer Protocol)是一种用于从万维网服务器...

    基于Http协议的断点续传-Java多线程与线程安全实践编程.zip

    基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多线程与线程安全实践编程.zip 基于Http协议的断点续传-Java多...

    Java多线程与线程安全编程实践-基于Http协议的断点续传.zip

    Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-基于Http协议的断点续传.zip Java多线程与线程安全编程实践-...

    TCPIP协议及网络编程技术

    1. **应用层**:这是最高层,包含了各种应用程序使用的协议,如HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。应用层负责提供特定服务,与用户直接交互。 2. **传输层**:这一层主要...

    C#网络协议编程实例

    HTTP协议是Web应用的基础,C#通过HttpWebRequest发起请求,设置URL、Method、Header等属性,然后使用GetResponse或BeginGetResponse获取响应。对于服务器端,可以创建HttpListener监听请求,对每个请求调用...

Global site tag (gtag.js) - Google Analytics