使用HttpUrlConnection进行post 提交

时间:2021-02-13 16:41:59

package com.json;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.test.client.JSONObject;
import com.test.upload.Asset;
import com.test.upload.UploadRequest;
import com.test.upload.Video;

 

public class Test {

 /**
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
 
//   
//     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
//     //wr.write(file);
//     wr.flush();
//     System.out.println("连接成功");
//    
//     /***json***/
//     Gson gson = new Gson();
//     User user1= new User("1245","000","2222","5555");
//   String json=  gson.toJson(user1);
//   System.out.println("---------------------"+json);
//  
//    User user= gson.fromJson(json, User.class);
//    System.out.println("*********************"+user.getStatus());
  //
    
  String loginParameters = "email=??&passwd=189.cn";
  String loginBack = Test.post(http://url, loginParameters);
  //获取登陆后返回的json字符串
  System.out.println("登陆后返回的json字符串"+loginBack);
  //json字符串转换成对象
  Gson gson = new Gson();
  User user= gson.fromJson(loginBack, User.class);
  System.out.println("获取token值:"+user.getToken());
  
  
  //创建空白视频 主要获取请求url 和视频 id
  String createVideoParameters="folderId=83587542191964162&title=我要创建视频啊";
  String createVideoBack =Test.post("url", createVideoParameters);
  System.out.println("空白视频返回的字符串"+createVideoBack);
  
  UploadRequest uploadRequest =gson.fromJson(createVideoBack, UploadRequest.class);
  System.out.println("获取上传视频文件的请求地址:"+uploadRequest.getUploadUrl());
  
  //上传视频文件 暂未实现
  
  
  
  
  Asset asset =gson.fromJson("上传之后返回的json字符串", Asset.class);
  System.out.println("视频播放id"+asset.getVideoId());
  String viddeoId=asset.getVideoId();
  
  //查询获取视频文件的地址 根据视频id查询 videoId
  String findVideo="videoId=86678073956630529";//viddeoId
  String findVideoBack=Test.get("url", findVideo);
  System.out.println("返回的json字符串:"+findVideoBack);
  Video video =gson.fromJson(findVideoBack, Video.class);
  System.out.println("视频播放地址:"+video.getVideoUrl());
  
  }
 
 //post 请求
 public static String post(String requestUrl,String parameters){
  StringBuffer buffer = new StringBuffer();
  URL url = null;

  HttpURLConnection conn = null;
  try {
   url = new URL(requestUrl);
   conn = (HttpURLConnection) url.openConnection();
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setRequestMethod("POST");// post

   conn.setUseCaches(false);
   conn.connect();
   // DataOutputStream out = new
   // DataOutputStream(conn.getOutputStream());
   PrintWriter outprint = new PrintWriter(new OutputStreamWriter(
     conn.getOutputStream(), "UTF-8"));
   outprint.write(parameters);
   outprint.flush();
   outprint.close();
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     conn.getInputStream(), "UTF-8"));
   String line = "";
   while ((line = reader.readLine()) != null) {
    buffer.append(line);
   }
   reader.close();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (ProtocolException e) {
   e.printStackTrace();

  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();

  } catch (IOException e) {
   e.printStackTrace();
  }
    
  if (conn != null) {
   conn.disconnect();
  }

  return buffer.toString();

 }
 
 //get请求
 public static String get(String requestUrl,String parameters){
  StringBuffer buffer = new StringBuffer();
  URL url = null;

  HttpURLConnection conn = null;
  try {
   url = new URL(requestUrl);
   conn = (HttpURLConnection) url.openConnection();
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setRequestMethod("GET");// post

   conn.setUseCaches(false);
   conn.connect();
   // DataOutputStream out = new
   // DataOutputStream(conn.getOutputStream());
   PrintWriter outprint = new PrintWriter(new OutputStreamWriter(
     conn.getOutputStream(), "UTF-8"));
   outprint.write(parameters);
   outprint.flush();
   outprint.close();
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     conn.getInputStream(), "UTF-8"));
   String line = "";
   while ((line = reader.readLine()) != null) {
    buffer.append(line);
   }
   reader.close();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (ProtocolException e) {
   e.printStackTrace();

  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();

  } catch (IOException e) {
   e.printStackTrace();
  }
    
  if (conn != null) {
   conn.disconnect();
  }

  return buffer.toString();

 }


}

 

//以下是 post get 和 提交文件上传文件的方法(修改版)

//post 请求
 public static String post(String requestUrl,String parameters){
  StringBuffer buffer = new StringBuffer();
  URL url = null;

  HttpURLConnection conn = null;
  try {
   url = new URL(requestUrl);
   conn = (HttpURLConnection) url.openConnection();
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setRequestMethod("POST");// post

   conn.setUseCaches(false);
   conn.connect();
   // DataOutputStream out = new
   // DataOutputStream(conn.getOutputStream());
   PrintWriter outprint = new PrintWriter(new OutputStreamWriter(
     conn.getOutputStream(), "UTF-8"));
   outprint.write(parameters);
   outprint.flush();
   outprint.close();
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     conn.getInputStream(), "UTF-8"));
   String line = "";
   while ((line = reader.readLine()) != null) {
    buffer.append(line);
   }
   reader.close();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (ProtocolException e) {
   e.printStackTrace();

  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();

  } catch (IOException e) {
   e.printStackTrace();
  }
    
  if (conn != null) {
   conn.disconnect();
  }

  return buffer.toString();

 }
 
 //get请求
 public static String get(String requestUrl,String parameters){
  StringBuffer buffer = new StringBuffer();
  URL url = null;

  HttpURLConnection conn = null;
  try {
   url = new URL(requestUrl);
   conn = (HttpURLConnection) url.openConnection();
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setRequestMethod("GET");// post

   conn.setUseCaches(false);
   conn.connect();
   // DataOutputStream out = new
   // DataOutputStream(conn.getOutputStream());
   PrintWriter outprint = new PrintWriter(new OutputStreamWriter(
     conn.getOutputStream(), "UTF-8"));
   outprint.write(parameters);
   outprint.flush();
   outprint.close();
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     conn.getInputStream(), "UTF-8"));
   String line = "";
   while ((line = reader.readLine()) != null) {
    buffer.append(line);
   }
   reader.close();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (ProtocolException e) {
   e.printStackTrace();

  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();

  } catch (IOException e) {
   e.printStackTrace();
  }
    
  if (conn != null) {
   conn.disconnect();
  }

  return buffer.toString();

 }
 
 //post 上传文件的的
 public static String postUrlWithData(String dispatchUrl, Map<String,String> paramMap,
   File file, Map<String,String> map ) {
//  JSONObject jsonObj = new JSONObject();
  StringBuffer buffer = new StringBuffer();

  HttpURLConnection conn = null;
  try {
   String BOUNDARY =  "---------7d4a6d158c9";
   String PREFIX = "--";
   String LINEND = "\r\n";
   String MULTIPART_FROM_DATA = "multipart/form-data";
   String CHARSET = "UTF-8";
   URL uri = new URL(dispatchUrl);
   conn = (HttpURLConnection) uri.openConnection();
   conn.setRequestMethod("POST");
   conn.setRequestProperty("connection", "keep-alive");
   conn.setRequestProperty("Charsert", "UTF-8");
   conn.setRequestProperty("Content-Type",
     new StringBuilder().append("multipart/form-data;boundary=")
       .append(BOUNDARY).toString());
   conn.setRequestProperty("User-Agent", "Mozilla/5.0(compatible)");
   conn.setRequestProperty("Accept", "*/*");
   conn.setDoInput(true);
   conn.setDoOutput(true);
   conn.connect();
   DataOutputStream outStream = new DataOutputStream(
     conn.getOutputStream());
   StringBuilder textParam = new StringBuilder();
   for (Map.Entry entry : paramMap.entrySet()) {
    textParam.append("--");
    textParam.append(BOUNDARY);
    textParam.append("\r\n");
    textParam.append(new StringBuilder()
      .append("Content-Disposition: form-data; name=\"")
      .append((String) entry.getKey()).append("\"")
      .append("\r\n").toString());
    textParam.append("Content-Type: text/plain; charset=UTF-8\r\n");
    textParam.append("Content-Transfer-Encoding: 8bit\r\n");
    textParam.append("\r\n");
    textParam.append(entry.getValue());
    textParam.append("\r\n");
   }
//   System.out.println(textParam.toString());
   outStream.write(textParam.toString().getBytes());
   outStream.flush();

   StringBuilder sb1 = new StringBuilder();
   sb1.append("--");
   sb1.append(BOUNDARY);
   sb1.append("\r\n");
   sb1.append(new StringBuilder()
     .append("Content-Disposition: form-data; name=\"")
     .append("file").append("\"; filename=\"")
     .append(file.getName()).append("\"")
     .append("\r\n").toString());
   sb1.append("Content-Type: application/octet-stream; charset=UTF-8\r\n");
   sb1.append("\r\n");
   outStream.write(sb1.toString().getBytes());
   outStream.flush();
   
   FileInputStream in = new FileInputStream(file); //获得文件输入流
         byte[] fileBytes = new byte[(int)file.length()];
   in.read(fileBytes);
        
   byte[] filebytes = fileBytes;
   outStream.write(filebytes, 0, filebytes.length);
   outStream.flush();
   outStream.write("\r\n".getBytes());
   outStream.flush();

   byte[] endData = new StringBuilder().append("--").append(BOUNDARY)
     .append("--").append("\r\n").toString().getBytes();
   outStream.write(endData);
   outStream.flush();
   outStream.close();

   int responseCode = conn.getResponseCode();

   if (responseCode != 200) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(
      conn.getErrorStream()));
    String line = null;
    StringBuffer errorMsg = new StringBuffer();
    if ((line = reader.readLine()) != null) {
     errorMsg.append(line).append("\n");
    }
    reader.close();

    throw new IOException(errorMsg.toString());
   }
   

   BufferedReader reader = new BufferedReader(new InputStreamReader(
     conn.getInputStream(), "utf-8"));
   String line = "";
   while ((line = reader.readLine()) != null) {
    buffer.append(line);
   }
   reader.close();

  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return "false";
  } catch (ProtocolException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return "false";
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return "false";
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return "false";
  }

  if (conn != null) {
   conn.disconnect();
  }
  
  return buffer.toString();
 }

 

//调用方法

File file = new File("e:\\1.3gp");
  Map<String,String> paramMap = new HashMap<String,String>();
  Map<String,String> map = new HashMap<String,String>();
  map.put("type", "video");
  map.put("name","file");
  
  
  String uploadBack=Test.postUrlWithData(uploadRequest.getUploadUrl(), paramMap,file, map);