Java HTTP post请求中某一个参数太长的问题

公司项目碰到一个问题,是从一个项目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();
	}

参考博客:参考博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值