Java 发送http请求,上传文件

package wxapi.WxHelper;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;

public class HttpRequestUtil {

	/**
	 * 发送get请求
	 * 
	 * @param requestUrl
	 *            请求url
	 * @param requestHeader
	 *            请求头
	 * @param responseEncoding
	 *            响应编码
	 * @return 页面响应html
	 */
	public static String sendGet(String requestUrl, Map<String, String> requestHeader, String responseEncoding) {
		String result = "";
		BufferedReader reader = null;
		try {
			if (requestUrl == null || requestUrl.isEmpty()) {
				return result;
			}
			URL realUrl = new URL(requestUrl);
			URLConnection connection = realUrl.openConnection();
			connection.setRequestProperty("accept", "text/html, application/xhtml+xml, image/jxr, */*");
			connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0");
			if (requestHeader != null && requestHeader.size() > 0) {
				for (Entry<String, String> entry : requestHeader.entrySet()) {
					connection.setRequestProperty(entry.getKey(), entry.getValue());
				}
			}
			connection.connect();
			if (responseEncoding == null || responseEncoding.isEmpty()) {
				responseEncoding = "UTF-8";
			}
			reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), responseEncoding));
			String line;
			while ((line = reader.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			System.out.println("发送GET请求出现异常!");
			e.printStackTrace();
		} finally {
			try {
				if (reader != null) {
					reader.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	/**
	 * 发送post请求
	 * 
	 * @param requestUrl
	 *            请求url
	 * @param requestHeader
	 *            请求头
	 * @param formTexts
	 *            表单数据
	 * @param files
	 *            上传文件
	 * @param requestEncoding
	 *            请求编码
	 * @param responseEncoding
	 *            响应编码
	 * @return 页面响应html
	 */
	public static String sendPost(String requestUrl, Map<String, String> requestHeader, Map<String, String> formTexts, Map<String, String> files, String requestEncoding, String responseEncoding) {
		OutputStream out = null;
		BufferedReader reader = null;
		String result = "";
		try {
			if (requestUrl == null || requestUrl.isEmpty()) {
				return result;
			}
			URL realUrl = new URL(requestUrl);
			HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
			connection.setRequestProperty("accept", "text/html, application/xhtml+xml, image/jxr, */*");
			connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0");
			if (requestHeader != null && requestHeader.size() > 0) {
				for (Entry<String, String> entry : requestHeader.entrySet()) {
					connection.setRequestProperty(entry.getKey(), entry.getValue());
				}
			}
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setRequestMethod("POST");
			if (requestEncoding == null || requestEncoding.isEmpty()) {
				requestEncoding = "UTF-8";
			}
			if (responseEncoding == null || responseEncoding.isEmpty()) {
				responseEncoding = "UTF-8";
			}
			if (requestHeader != null && requestHeader.size() > 0) {
				for (Entry<String, String> entry : requestHeader.entrySet()) {
					connection.setRequestProperty(entry.getKey(), entry.getValue());
				}
			}
			if (files == null || files.size() == 0) {
				connection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
				out = new DataOutputStream(connection.getOutputStream());
				if (formTexts != null && formTexts.size() > 0) {
					String formData = "";
					for (Entry<String, String> entry : formTexts.entrySet()) {
						formData += entry.getKey() + "=" + entry.getValue() + "&";
					}
					formData = formData.substring(0, formData.length() - 1);
					out.write(formData.toString().getBytes(requestEncoding));
				}
			} else {
				String boundary = "-----------------------------" + String.valueOf(new Date().getTime());
				connection.setRequestProperty("content-type", "multipart/form-data; boundary=" + boundary);
				out = new DataOutputStream(connection.getOutputStream());
				if (formTexts != null && formTexts.size() > 0) {
					StringBuilder sbFormData = new StringBuilder();
					for (Entry<String, String> entry : formTexts.entrySet()) {
						sbFormData.append("--" + boundary + "\r\n");
						sbFormData.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n");
						sbFormData.append(entry.getValue() + "\r\n");
					}
					out.write(sbFormData.toString().getBytes(requestEncoding));
				}
				for (Entry<String, String> entry : files.entrySet()) {
					String fileName = entry.getKey();
					String filePath = entry.getValue();
					if (fileName == null || fileName.isEmpty() || filePath == null || filePath.isEmpty()) {
						continue;
					}
					File file = new File(filePath);
					if (!file.exists()) {
						continue;
					}
					out.write(("--" + boundary + "\r\n").getBytes(requestEncoding));
					out.write(("Content-Disposition: form-data; name=\"" + fileName + "\"; filename=\"" + file.getName() + "\"\r\n").getBytes(requestEncoding));
					out.write(("Content-Type: application/x-msdownload\r\n\r\n").getBytes(requestEncoding));
					DataInputStream in = new DataInputStream(new FileInputStream(file));
					int bytes = 0;
					byte[] bufferOut = new byte[1024];
					while ((bytes = in.read(bufferOut)) != -1) {
						out.write(bufferOut, 0, bytes);
					}
					in.close();
					out.write(("\r\n").getBytes(requestEncoding));
				}
				//out.write(("--" + boundary + "--").getBytes(requestEncoding));这样写微信公众号开发上传素材有问题
                                out.write(("--" + boundary + "--\r\n").getBytes(requestEncoding));
			}
			out.flush();
			out.close();
			out = null;
			reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), responseEncoding));
			String line;
			while ((line = reader.readLine()) != null) {
				result += line;
			}
		} catch (Exception e) {
			System.out.println("发送POST请求出现异常!");
			e.printStackTrace();
		} finally {
			try {
				if (out != null) {
					out.close();
				}
				if (reader != null) {
					reader.close();
				}
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		return result;
	}
}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值