需要注意的是:有时候post请求也并不是一定会把参数存在map里,放入方法体中;本人在实际操作中,将参数存在map中,放入方法体,执行代码一直报500错误。服务端也没有成功取到存放的参数。之后改成 ?参数=xxx 的格式,才发送请求成功。
import com.alibaba.fastjson.JSON;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("code","SQ");
String param= JSON.toJSONString(map);
String url = "http://localhost:8888/MeteoBP/api/rest/web/product/product3d?datetime=20220630000000&type=24";
String postValue = sendPost(url, param,Charset.forName("utf-8"));
System.out.println(postValue);
}
public static String sendPost(String url, String param, Charset charset) {
try {
URL httpurl = new URL(url);
//打开和url的连接
HttpURLConnection httpConn = (HttpURLConnection) httpurl.openConnection();
//设置通用的请求头属性
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("accept", "*/*");
httpConn.setRequestProperty("connection", "Keep-Alive");
httpConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset.name());
/*httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; "
+ "Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");*/
// 发送POST请求必须设置如下两行 否则会抛异常(java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true))
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.setUseCaches(false);
/*httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset.name());*/
httpConn.connect();
OutputStream outputStream = httpConn.getOutputStream();
PrintWriter out = new PrintWriter(outputStream);
//print在方法内也是调用的write方法,多了null的判断逻辑
out.print(param);
//out.write(param);
out.flush();
out.close();
InputStream inputStream = httpConn.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, charset.name()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}
String resp = stringBuffer.toString();
// System.out.println(resp);
if (stringBuffer != null) {
try {
bufferedReader.close();
} catch (IOException var18) {
var18.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException var17) {
var17.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException var17) {
var17.printStackTrace();
}
}
return resp;
}catch (IOException e) {
throw new RuntimeException(String.format("url:%s,param:%s,message:%s", url, param, e.getMessage()), e);
}
}