首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Java 发送http请求上传文件功能案例

2024-09-26 来源:华佗小知识

  具体代码如下所示:

  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.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;

  }

  }

显示全文