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

来源:互联网 发布:网站正在升级最新域名 编辑:程序博客网 时间:2024/05/16 17:12
<span style="font-family: Arial, Helvetica, sans-serif;">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) {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 (sbParams != 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(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();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 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("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++) {resutlBytes[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。好了就到这里吧,有问题记得留言哦
                                             
4 0
原创粉丝点击