还是先看具体协议是什么。
首先使用postman向本地socket服务器发送x-www-form-urlencoded请求,postman示例如下:
socket服务端收到的内容如下:
127.0.0.1:9289
Data Request : POST / HTTP/1.1
User-Agent: PostmanRuntime/7.26.1
Accept: */*
Cache-Control: no-cache
Postman-Token: ce83a31d-6d91-4c80-9d28-c38a1fed4ecb
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
Cookie: JSESSIONID=ED0FA7D018270E8CF75AA978B36EAEDE
12=34&key=value
从上面示例中可以看出post x-www-form-urlencoded请求和get请求类似,只不过将数据放置于请求体中,Content-Type也不同。据此具体代码如下:
public String postFormUrlEncoded(String path, HashMap<String, String> Headers, String requestBody) {
String result = " ";
HttpURLConnection connection = null;
try {
URL url = new URL(path);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Connection", "Keep-Alive");
// 不使用缓存
connection.setUseCaches(false);
if (Headers != null) {
if (Headers.size() > 0) {
for (Map.Entry<String, String> entry : Headers.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
}
}
connection.connect();
PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8));
out.print(requestBody);
out.flush();
int resultCode = connection.getResponseCode();
if (HttpURLConnection.HTTP_OK == resultCode) {
StringBuffer stringBuffer = new StringBuffer();
String readLine;
BufferedReader responseReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
while ((readLine = responseReader.readLine()) != null) {
stringBuffer.append(readLine).append("\n");
}
responseReader.close();
result = stringBuffer.toString();
} else {
result = "{\"code\":\"" + resultCode + "\"}";
}
out.close();
} catch (Exception e) {
logger.error(e.toString());
return "{\"code\":500,\"result\":\"x-www-form-urlencoded请求 " + path + " 时出现异常\"}";
} finally {
if (connection != null) {
connection.disconnect();
}
}
return result;
}