开发者

java中的常见几种发送http请求实例

目录
  • Java常见几种发送http请求实例
    • 上面4种分别可发送get和post请求的方法
  • 总结

    java常见几种发送http请求实例

    <span>import java.io.BufferedReader;</span>
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.Socket;
    import java.net.URL;
    import java.net.URLConnection;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
     
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
     
    /**
     * @Description:发送http请求帮助类
     * @author:liuyc
     * @time:2016年5月17日 下午3:25:32
     */
    public class HttpClientHelper {
    	/**
    	 * @Description:使用HttpURLConnection发送post请求
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:26:07
    	 */
    	public static String sendPost(String urlParam, Map<String, Object> params, String charset) {
    		StringBuffer resultBuffer = null;
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> e : params.entrySet()) {
    				sbParams.append(e.getKey());
    				sbParams.append("=");
    				sbParams.append(e.getValue());
    				sbParams.append("&");
    			}
    		}
    		HttpURLConnection con = null;
    		OutputStreamWriter osw = null;
    		BufferedReader br = null;
    		// 发送请求
    		try {
    			URL url = new URL(urlParam);
    			con = (HttpURLConnection) url.openConnection();
    			con.setRequestMethod("POST");
    			con.setDoOutput(true);
    			con.setDoInput(true);
    			con.setUseCaches(false);
    			con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    			if (sbParams != null && sbParams.length() > 0) {
    				osw = new OutputStreamWriter(con.getOutputStream(), charset);
    				osw.write(sbParams.substring(0, sbParams.length() - 1));
    				osw.flush();
    			}
    			// 读取返回内容
    			resultBuffer = new StringBuffer();
    			int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));
    			if (contentLength > 0) {
    				br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
    				String temp;
    				while ((temp = br.readLine()) != null) {
    					resultBuffer.append(temp);
    				}
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (osw != null) {
    				try {
    					osw.close();
    				} catch (IOException e) {
    					osw = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (con != null) {
    						con.disconnect();
    						con = null;
    					}
    				}
    			}
    			if (br != null) {www.devze.com
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (con != null) {
    						con.disconnect();
    						con = null;
    					}
    				}
    			}
    		}
     
    		return resultBuffer.toString();
    	}
     
    	/**
    	 * @Description:使用URLConnection发送post
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:26:52
    	 */
    	public static String sendPost2(String urlParam, Map<String, Object> params, String charset) {
    		StringBuffer resultBuffer = null;
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> e : params.entrySet()) {
    				sbParams.append(e.getKey());
    				sbParams.append("=");
    				sbParams.append(e.getValue());
    				sbParams.append("&");
    			}
    		}
    		URLConnection con = null;
    		OutputStreamWriter osw = null;
    		BufferedReader br = null;
    		try {
    			URL realUrl = new URL(urlParam);
    			// 打开和URL之间的连接
    			con = realUrl.openConnection();
    			// 设置通用的请求属性
    			con.setRequestProperty("accept", "*/*");
    			con.setRequestProperty("connection", "Keep-Alive");
    			con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    			con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 发送POST请求必须设置如下两行
    			con.setDoOutput(true);
    			con.setDoInput(true);
    			// 获取URLConnection对象对应的输出流
    			osw = new OutputStreamWriter(con.getOutputStream(), charset);
    			if (javascriptsbParams != null && sbParams.length() > 0) {
    				// 发送请求参数
    				osw.write(sbParams.substring(0, sbParams.length() - 1));
    				// flush输出流的缓冲
    				osw.flush();
    			}
    			// 定义BufferedReader输入流来读取URL的响应
    			resultBuffer = new StringBuffer();
    			int contentLength = Integer.parseInt(con.getHeaderField("Content-Length"));
    			if (contentLength > 0) {
    				br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
    				String temp;
    				while ((temp = br.readLine()) != null) {
    					resultBuffer.append(temp);
    				}
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (osw != null) {
    				try {
    					osw.close();
    				} catch (IOException e) {
    					osw = null;
    					throw new RuntimeException(e);
    				}
    			}
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				}
    			}
    		}
    		return resultBuffer.toString();
    	}
     
    	/**
    	 * @Description:发送get请求保存下载文件
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:27:29
    	 */
    	public static void sendGetAndSaveFile(String urlParam, Map<String, Object> params, String fileSavePath) {
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> entry : params.entrySet()) {
    				sbParams.append(entry.getKey());
    				sbParams.append("=");
    				sbParams.append(entry.getValue());
    				sbParams.append("&");
    			}
    		}
    		HttpURLConnection con = null;
    		BufferedReader br = null;
    		FileOutputStream os = null;
    		try {
    			URL url = null;
    			if (sbParams != null && sbParams.length() > 0) {
    				url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
    			} else {
    				url = new URL(urlParam);
    			}
    			con = (HttpURLConnection) url.openConnection();
    			con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    			con.connect();
    			InputStream is = con.getInputStream();
    			os = new FileOutputStream(fileSavePath);
    			byte buf[] = new byte[1024];
    			int count = 0;
    			while ((count = is.read(buf)) != -1) {
    				os.write(buf, 0, count);
    			}
    			os.flush();
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (os != null) {
    				try {
    					os.close();
    				} catch (IOException e) {
    					os = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (con != null) {
    						con.disconnect();
    						con = null;
    					}
    				}
    			}
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (con != null) {
    						con.disconnect();
    						con = null;
    					}
    				}
    			}
    		}
    	}
     
    	/**
    	 * @Description:使用HttpURLConnection发送get请求
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:27:29
    	 */
    	public static String sendGet(String urlParam, Map<String, Object> params, String charset) {
    		StringBuffer resultBuffer = null;
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> entry : params.entrySet()) {
    				sbParams.append(entry.getKey());
    				sbParams.append("=");
    				sbParams.append(entry.getValue());
    				sbParams.append("&");
    			}
    		}
    		HttpURLConnection con = null;
    		BufferedReader br = null;
    		try {
    			URL url = null;
    			if (sbParams != null && sbParams.length() > 0) {
    				url = new URL(uwww.devze.comrlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
    			} else {
    				url = new URL(urlParam);
    			}
    			con = (HttpURLConnection) url.openConnection();
    			con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    			con.connect();
    			resultBuffer = new StringBuffer();
    			br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
    			String temp;
    			while ((temp = br.readLine()) != null) {
    				resultBuffer.append(temp);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (con != null) {
    						con.disconnect();
    						con = null;
    					}
    				}
    			}
    		}
    		return resultBuffer.toString();
    	}
     
    	/**
    	 * @Description:使用URLConnection发送get请求
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:27:58
    	 */
    	public static String sendGet2(String urlParam, Map<String, Object> params, String charset) {
    		StringBuffer resultBuffer = null;
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> entry : params.entrySet()) {
    				sbParams.append(entry.getKey());
    				sbParams.append("=");
    				sbParams.append(entry.getValue());
    				sbParams.append("&");
    			}
    		}
    		BufferedReader br = null;
    		try {
    			URL url = null;
    			if (sbParams != null && sbParams.length() > 0) {
    				url = new URL(urlParam + "?" + sbParams.substring(0, sbParams.length() - 1));
    			} else {
    				url = new URL(urlParam);
    			}
    			URLConnection con = url.openConnection();
    			// 设置请求属性
    			con.setRequestProperty("accept", "*/*");
    			con.setRequestProperty("connection", "Keep-Alive");
    			con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    			con.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 建立连接
    			con.connect();
    			resultBuffer = new StringBuffer();
    			br = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
    			String temp;
    			while ((temp = br.readLine()) != null) {
    				resultBuffer.append(temp);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				}
    			}
    		}
    		return resultBuffer.toString();
    	}
     
    	/**
    	 * @Description:使用HttpClient发送post请求
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:28:23
    	 */
    	public static String httpClientPost(String urlParam, Map<String, Object> params, String charset) {
    		StringBuffer resultBuffer = null;
    		HttpClient client = new DefaultHttpClient();
    		HttpPost httpPost = new HttpPost(urlParam);
    		// 构建请求参数
    		List<NameValuePair> list = new ArrayList<NameValuePair>();
    		Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();
    		while (iterator.hasNext()) {
    			Entry<String, Object> elem = iterator.next();
    			list.add(new BasicNameValuePair(elem.getKey(), String.valueOf(elem.getValue())));
    		}
    		BufferedReader br = null;
    		try {
    			if (list.size() > 0) {
    				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
    				httpPost.setEntity(entity);
    			}
    			HttpResponse response = client.execute(httpPost);
    			// 读取服务器响应数据
    			resultBuffer = new StringBuffer();
    			br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    			String temp;
    			while ((temp = br.readLine()) != null) {
    				resultBuffer.append(temp);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				}
    			}
    		}
    		return resultBuffer.toString();
    	}
     
    	/**
    	 * @Description:使用HttpClient发送get请求
    	 * @author:liuyc
    	 * @time:2016年5月17日 下午3:28:56
    	 */
    	public static String httpClientGet(String urlParam, Map<String, Object> params, String charset) {
    		StringBuffer resultBuffer = null;
    		HttpClient client = new DefaultHttpClient();
    		BufferedReader br = null;
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> entry : params.entrySet()) {
    				sbParams.append(entry.getKey());
    				sbParams.append("=");
    				try {
    					sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), charset));
    				} catch (UnsupportedEncodingException e) {
    					throw new RuntimeException(e);
    				}
    				sbParams.append("&");
    			}
    		}
    		if (sbParams != null && sbParams.length() > 0) {
    			urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);
    		}
    		HttpGet httpGet = new HttpGet(urlParam);
    		try {
    			HttpResponse response = client.execute(httpGet);
    			// 读取服务器响应数据
    			br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    			String temp;
    			resultBuffer = new StringBuffer();
    			while ((temp = br.readLine()) != null) {
    				resultBuffer.append(temp);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (br != null) {
    				try {
    					br.close();
    				} catch (IOException e) {
    					br = null;
    					throw new RuntimeException(e);
    				}
    			}
    		}
    		return resultBuffer.toString();
    	}
     
    	/**
    	 * @Description:使用socket发送post请求
    	 * @author:liuyc
    	 * @time:2016年5月18日 上午9:26:22
    	 */
    	public static String sendSocketPost(String urlParam, Map<String, Object> params, String charset) {
    		String result = "";
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> entry : params.entrySet()) {
    				sbParams.append(entry.getKey());
    				sbParams.append("=");
    				sbParams.append(entry.getValue());
    				sbParams.append("&");
    			}
    		}
    		Socket socket = null;
    		OutputStreamWriter osw = null;
    		InputStream is = null;
    		try {
    			URL url = new URL(urlParam);
    			String host = url.getHost();
    			int port = url.getPort();
    			if (-1 == port) {
    				port = 80;
    			}
    			String path = url.getPath();
    			socket = new Socket(host, port);
    			StringBuffer sb = new StringBuffer();
    			sb.append("POST " + path + " HTTP/1.1\r\n");
    			sb.append("Host: " + host + "\r\n");
    			sb.append("Connection: Keep-Alive\r\n");
    			sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");
    			sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");
    			// 这里一个回车换行,表示消息头写完,不然服务器会继续等待
    			sb.append("\r\n");
    			if (sbParams != null && sbParams.length() > 0) {
    				sb.append(sbParams.substring(0, sbParams.length() - 1));
    			}
    			osw = new OutputStreamWriter(socket.getOutputStream());
    			osw.write(sb.toString());
    			osw.flush();
    			is = socket.getInputStream();
    			String line = null;
    			// 服务器响应体数据长度
    			int contentLength = 0;
    			// 读取http响应头部信息
    			do {
    				line = readLine(is, 0, charset);
    				if (line.startsWith("Content-Length")) {
    					// 拿到响应体内容长度
    					contentLength = Integer.parseInt(line.split(":")[1].trim());
    				}
    				// 如果遇到了一个单独的回车换行,则表示请求头结束
    			} while (!line.equals("\r\n"));
    			// 读取出响应体数据(就是你要的数据)
    			result = readLine(is, contentLength, charset);
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (osw != null) {
    				try {
    					osw.close();
    				} catch (IOException e) {
    					osw = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (socket != null) {
    						try {
    							socket.close();
    						} catch (IOException e) {
    							socket = null;
    							throw new RuntimeException(e);
    						}
    					}
    				}
    			}
    			if (is != null) {
    				try {
    					is.close();
    				} catch (IOException e) {
    					is = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (socket != null) {
    						try {
    							socket.close();
    						} catch (IOException e) {
    							socket = null;
    							throw new RuntimeException(e);
    						}
    					}
    				}
    			}
    		}
    		return result;
    	}
     
    	/**
    	 * @Description:使用socket发送get请求
    	 * @author:liuyc
    	 * @time:2016年5月18日 上午9:27:18
    	 */
    	public static String sendSocketGet(String ujsrlParam, Map<String, Object> params, String charset) {
    		String result = "";
    		// 构建请求参数
    		StringBuffer sbParams = new StringBuffer();
    		if (params != null && params.size() > 0) {
    			for (Entry<String, Object> entry : params.entrySet()) {
    				sbParams.append(entry.getKey());
    				sbParams.append("=");
    				sbParams.append(entry.getValue());
    				sbParams.append("&");
    			}
    		}
    		Socket socket = null;
    		OutputStreamWriter osw = null;
    		InputStream is = null;
    		try {
    			URL url = new URL(urlParam);
    			String host = url.getHost();
    			int port = url.getPort();
    			if (-1 == port) {
    				port = 80;
    			}
    			String path = url.getPath();
    			socket = new Socket(host, port);
    			StringBuffer sb = new StringBuffer();
    			sb.append("GET " + path + " HTTP/1.1\r\n");
    			sb.append("Host: " + host + "\r\n");
    			sb.append("Connection: Keep-Alive\r\n");
    			sb.append("Content-Type: application/x-www-form-urlencoded; charset=utf-8 \r\n");
    			sb.append("Content-Length: ").append(sb.toString().getBytes().length).append("\r\n");
    			// 这里一个回车换行,表示消息头写完,不然服务器会继续等待
    			sb.append("\r\n");
    			if (sbParams != null && sbParams.length() > 0) {
    				sb.append(sbParams.substring(0, sbParams.length() - 1));
    			}
    			osw = new OutputStreamWriter(socket.getOutputStream());
    			osw.write(sb.toString());
    			osw.flush();
    			is = socket.getInputStream();
    			String line = null;
    			// 服务器响应体数据长度
    			int contentLength = 0;
    			// 读取http响应头部信息
    			do {
    				line = readLine(is, 0, charset);
    				if (line.startsWith("Content-Length")) {
    					// 拿到响应体内容长度
    					contentLength = Integer.parseInt(line.split(":")[1].trim());
    				}
    				// 如果遇到了一个单独的回车换行,则表示请求头结束
    			} while (!line.equals("\r\n"));
    			// 读取出响应体数据(就是你要的数据)
    			result = readLine(is, contentLength, charset);
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		} finally {
    			if (osw != null) {
    				try {
    					osw.close();
    				} catch (IOException e) {
    					osw = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (socket != null) {
    						try {
    							socket.close();
    						} catch (IOException e) {
    							socket = null;
    							throw new RuntimeException(e);
    						}
    					}
    				}
    			}
    			if (is != null) {
    				try {
    					is.close();
    				} catch (IOException e) {
    					is = null;
    					throw new RuntimeException(e);
    				} finally {
    					if (socket != null) {
    						try {
    							socket.close();
    						} catch (IOException e) {
    							socket = null;
    							throw new RuntimeException(e);
    						}
    					}
    				}
    			}
    		}
    		return result;
    	}
     
    	/**
    	 * @Description:读取一行数据,contentLe内容长度为0时,读取响应头信息,不为0时读正文
    	 * @time:2016年5月17日 下午6:11:07
    	 */
    	private static String readLine(InputStream is, int contentLength, String charset) throws IOException {
    		List<Byte> lineByte = new ArrayList<Byte>();
    		byte tempByte;
    		int cumsum = 0;
    		if (contentLength != 0) {
    			do {
    				tempByte = (byte) is.read();
    				lineByte.add(Byte.valueOf(tempByte));
    				cumsum++;
    			} while (cumsum < contentLength);// cumsum等于contentLength表示已读完
    		} else {
    			do {
    				tempByte = (byte) is.read();
    				lineByte.add(Byte.valueOf(tempByte));
    			} while (tempByte != 10);// 换行符的ascii码值为10
    		}
     
    		byte[] resutlBytes = new byte[lineByte.size()];
    		for (int i = 0; i < lineByte.size(); i++) {
    			resutljsBytes[i] = (lineByte.get(i)).byteValue();
    		}
    		return new String(resutlBytes, charset);
    	}
    	
    }

    上面4种分别可发送get和post请求的方法

    • 第1种:HttpURLConnection、
    • 第2种:URLConnection、
    • 第3种:HttpClient、
    • 第4种:Socket,朋友们要注意的是,使用第3种HttpClient时需要依赖于三个jar包,分别是:apache-httpcomponents-httpclient.jar、commons-logging-1.0.4.jar、httpcore-4.1.1.jar。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜