您的位置:首页 > 理论基础 > 计算机网络

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

2016-11-29 12:05 435 查看
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。好了就到这里吧,有问题记得留言哦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: