package com.fzzy.push.gb2022;
|
|
import com.alibaba.fastjson.JSON;
|
import com.fzzy.api.dto.ResponseDto;
|
|
import com.fzzy.gateway.data.GatewayResponse;
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import java.io.*;
|
import java.net.*;
|
import java.util.*;
|
|
/**
|
* @author: vincexu
|
* @ClassName: HttpClientUtil.java
|
*/
|
@Slf4j
|
public class HttpClientUtil {
|
|
|
/**
|
* post formData
|
*
|
* @param url
|
* @param map
|
* @return
|
* @throws Exception
|
*/
|
@SuppressWarnings("resource")
|
public static ResponseDto postFormData(String url, Map<String, Object> map) throws Exception {
|
log.info("---------接口请求地址:" + url + "----------参数:" + JSON.toJSONString(map) + "---------");
|
BufferedReader in = null;
|
URL urls = new URL(url);
|
HttpURLConnection connection = null;
|
OutputStream outputStream = null;
|
String rs = "";
|
String JSESSIONID = (String) map.get("JSESSIONID");
|
ResponseDto responseDto;
|
try {
|
connection = (HttpURLConnection) urls.openConnection();
|
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork");
|
connection.setDoOutput(true);
|
connection.setDoInput(true);
|
connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8");
|
connection.setRequestProperty("Accept", "*/*");
|
connection.setRequestProperty("Range", "bytes=" + "");
|
connection.setConnectTimeout(20000);
|
connection.setReadTimeout(30000);
|
connection.setRequestMethod("POST");
|
if (StringUtils.isNotEmpty(JSESSIONID)) {
|
// connection.setRequestProperty("Cookie", "JSESSIONID="+JSESSIONID);
|
// connection.setRequestProperty(" Set-Cookies", JSESSIONID);
|
connection.setRequestProperty("Cookie", "JSESSIONID=" + JSESSIONID);
|
}
|
map.remove("JSESSIONID");
|
|
StringBuffer buffer = new StringBuffer();
|
outputStream = connection.getOutputStream();
|
Set<Map.Entry<String, Object>> entries = map.entrySet();
|
for (Map.Entry<String, Object> entry : entries) {
|
// 每次都清空buffer,避免写入上次的数据
|
buffer.delete(0, buffer.length());
|
buffer.append("------footfoodapplicationrequestnetwork\r\n");
|
Object value = entry.getValue();
|
if (!(value instanceof File)) {
|
buffer.append("Content-Disposition: form-data; name=\"");
|
buffer.append(entry.getKey());
|
buffer.append("\"\r\n\r\n");
|
buffer.append(entry.getValue());
|
buffer.append("\r\n");
|
outputStream.write(buffer.toString().getBytes());
|
// System.out.println(buffer.toString());
|
} else {
|
buffer.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + ((File) entry.getValue()).getName() + "\"\r\n");
|
buffer.append("Content-Type: " + "zip" + "\r\n\r\n");
|
// System.out.println(buffer.toString());
|
outputStream.write(buffer.toString().getBytes());
|
File file = (File) entry.getValue();
|
DataInputStream ins = new DataInputStream(new FileInputStream(file));
|
int bytes = 0;
|
byte[] bufferOut = new byte[1024];
|
while ((bytes = ins.read(bufferOut)) != -1) {
|
outputStream.write(bufferOut, 0, bytes);
|
// System.out.print("A");
|
}
|
// 文件流后面添加换行,否则文件后面的一个参数会丢失
|
outputStream.write("\r\n".getBytes());
|
// System.out.println("\r\n");
|
}
|
}
|
if (entries != null && map.size() > 0) {
|
buffer.delete(0, buffer.length());
|
buffer.append("------footfoodapplicationrequestnetwork--\r\n");
|
// System.out.println(buffer.toString());
|
}
|
outputStream.write(buffer.toString().getBytes());
|
try {
|
connection.connect();
|
if (connection.getResponseCode() == 200) {
|
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
|
String line = "";
|
while ((line = in.readLine()) != null) {
|
rs += line;
|
}
|
} else {
|
log.error("http状态:" + connection.getResponseCode());
|
log.error("http消息:" + connection.getResponseMessage());
|
}
|
|
String serverCookies = connection.getHeaderField("Set-Cookie");
|
log.info("serverCookies:" + serverCookies);
|
|
if (serverCookies != null) {
|
|
String[] cookies = serverCookies.split(";");
|
|
for (String s : cookies) {
|
|
s = s.trim();
|
|
if (s.split("=")[0].equals("JSESSIONID")) {
|
|
JSESSIONID = s.split("=")[1];
|
}
|
}
|
}
|
log.info("JSESSIONID:" + JSESSIONID);
|
|
} catch (Exception e) {
|
System.out.println("发生异常");
|
log.error(e.getMessage(), e);
|
rs = null;
|
return new ResponseDto(99, e.getMessage());
|
}
|
log.info("---------接口返回:" + rs + "---------");
|
responseDto = JSON.parseObject(rs, ResponseDto.class);
|
if (responseDto == null) return new ResponseDto(99, "接口请求发生未知错误");
|
responseDto.setJSESSIONID(JSESSIONID);
|
return responseDto;
|
} finally {
|
try {
|
outputStream.close();
|
if (in != null) {
|
in.close();
|
}
|
} catch (Exception e) {
|
}
|
outputStream = null;
|
if (connection != null)
|
connection.disconnect();
|
connection = null;
|
}
|
}
|
|
|
public static GatewayResponse pushGateway(String url, Map<String, Object> map) throws Exception {
|
log.info("---------接口请求地址:" + url + "----------参数:" + JSON.toJSONString(map) + "---------");
|
|
BufferedReader in = null;
|
URL urls = new URL(url);
|
HttpURLConnection connection = null;
|
OutputStream outputStream = null;
|
String rs = "";
|
GatewayResponse responseDto;
|
try {
|
connection = (HttpURLConnection) urls.openConnection();
|
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork");
|
connection.setDoOutput(true);
|
connection.setDoInput(true);
|
connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8");
|
connection.setRequestProperty("Accept", "*/*");
|
connection.setRequestProperty("Range", "bytes=" + "");
|
connection.setConnectTimeout(20000);
|
connection.setReadTimeout(30000);
|
connection.setRequestMethod("POST");
|
|
StringBuffer buffer = new StringBuffer();
|
outputStream = connection.getOutputStream();
|
Set<Map.Entry<String, Object>> entries = map.entrySet();
|
for (Map.Entry<String, Object> entry : entries) {
|
// 每次都清空buffer,避免写入上次的数据
|
buffer.delete(0, buffer.length());
|
buffer.append("------footfoodapplicationrequestnetwork\r\n");
|
Object value = entry.getValue();
|
if (!(value instanceof File)) {
|
buffer.append("Content-Disposition: form-data; name=\"");
|
buffer.append(entry.getKey());
|
buffer.append("\"\r\n\r\n");
|
buffer.append(entry.getValue());
|
buffer.append("\r\n");
|
outputStream.write(buffer.toString().getBytes());
|
} else {
|
buffer.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + ((File) entry.getValue()).getName() + "\"\r\n");
|
buffer.append("Content-Type: " + "zip" + "\r\n\r\n");
|
outputStream.write(buffer.toString().getBytes());
|
File file = (File) entry.getValue();
|
DataInputStream ins = new DataInputStream(new FileInputStream(file));
|
int bytes = 0;
|
byte[] bufferOut = new byte[1024];
|
while ((bytes = ins.read(bufferOut)) != -1) {
|
outputStream.write(bufferOut, 0, bytes);
|
}
|
// 文件流后面添加换行,否则文件后面的一个参数会丢失
|
outputStream.write("\r\n".getBytes());
|
}
|
}
|
if (entries != null && map.size() > 0) {
|
buffer.delete(0, buffer.length());
|
buffer.append("------footfoodapplicationrequestnetwork--\r\n");
|
}
|
outputStream.write(buffer.toString().getBytes());
|
try {
|
connection.connect();
|
if (connection.getResponseCode() == 200) {
|
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
|
String line = "";
|
while ((line = in.readLine()) != null) {
|
rs += line;
|
}
|
} else {
|
log.error("http状态:" + connection.getResponseCode());
|
log.error("http消息:" + connection.getResponseMessage());
|
}
|
} catch (Exception e) {
|
System.out.println("发生异常");
|
log.error(e.getMessage(), e);
|
rs = null;
|
return new GatewayResponse(99, e.getMessage());
|
}
|
log.info("---------接口返回:" + rs + "---------");
|
responseDto = JSON.parseObject(rs, GatewayResponse.class);
|
if (responseDto == null) return new GatewayResponse(99, "接口请求发生未知错误");
|
return responseDto;
|
} finally {
|
try {
|
outputStream.close();
|
if (in != null) {
|
in.close();
|
}
|
} catch (Exception e) {
|
}
|
outputStream = null;
|
if (connection != null)
|
connection.disconnect();
|
connection = null;
|
}
|
}
|
|
}
|