公司项目碰到一个问题,是从一个项目post请求到另一个项目,由于其中的一个参数实在太长,会报如下错误。
java.lang.IllegalArgumentException: Request header is too large
通过更改server.xml的方式配置Tomcat。
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
redirectPort="8443" maxPostSize="0" maxHttpHeaderSize ="102400"/>
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8089" protocol="HTTP/1.1"
redirectPort="8443" maxPostSize="3097152000"
maxHttpHeaderSize ="10240000"/>
由于不知名原因,该方法并未奏效。
通过该代码的方式解决。
public static String sendPostRequest(String urlStr, Map<String, Object> params) throws Exception{
StringBuilder postData = new StringBuilder();
for (Map.Entry<String,Object> param : params.entrySet()) {
if (postData.length() != 0) {
postData.append('&');
}
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection)(new URL(urlStr)).openConnection();
Map<String, String> headers = new HashMap<String, String>();
String userpass = 另一个项目的参数1 + ":" + 另一个项目的参数2;
String basicAuth = "Basic " + Base64Util.getBase64Str(userpass, "encode");
headers.put("Authorization", basicAuth);
Iterator<Entry<String, String>> it = headers.entrySet().iterator();
while (it.hasNext()) {
Entry<String, String> entry = it.next();
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setConnectTimeout(3000);
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuffer document = new StringBuffer();
String line = null;
while ((line = reader.readLine()) != null) {
document.append(line + " ");
}
reader.close();
return document.toString().trim();
}
参考博客:参考博客