HttpURLConnection 411错误解决

1.问题描述

Java HttpURLConnection类发送Http请求链接外网返回ResponseCode为411,对方为.NET服务器,网上查明原因可能来自以下:

1、可能是没有传http中的content-length参数,这个一般都有。
2、可能是因为请求方式错误的,本来只是获取数据,应该使用GET的方式;但是你使用的是POST的方式。

首先第一个方法:

conn.setRequestProperty("Content-Length", ""+info.getBytes().length);

设置后还是411错误

第二个方法:将请求方式改为GET, 成功。

但联调方反馈请求方式没有变,依然为POST,很纳闷.....下班后,用浏览器Http在线测试工具试了一下,发现添加参数Content-Length后,POST方式也能请求成功。

反过来,打印日志,发现属性"Content-Length"为NULL...也就是HTTPURLConnection调用setRequestProperty无效。所以这里也提醒自己,自测万无一失能避免沟通浪费。

这里推荐http测试用fiddler。定位到问题就好查了。

http://blog.csdn.net/Feng______/article/details/38301293 这个人总结的很好,自己也去看了源码。

 private static final Set<String> restrictedHeaderSet;
    private static final String[] restrictedHeaders = {
	/* Restricted by XMLHttpRequest2 */
	//"Accept-Charset",
	//"Accept-Encoding",
	"Access-Control-Request-Headers",
	"Access-Control-Request-Method",
	"Connection", /* close is allowed */
	"Content-Length",
	//"Cookie",
	//"Cookie2",
	"Content-Transfer-Encoding",
	//"Date",
	"Expect",
	"Host",
	"Keep-Alive",
	"Origin",
	// "Referer",
	// "TE",
	"Trailer",
	"Transfer-Encoding",
	"Upgrade",
	//"User-Agent",
	"Via"
    };

在静态初始化代码中发现allowRestrictedHeaders是由安全管理器的返回值决定的。

restrictedHeaderSet的内容是由restrictedHeaders数组决定的。

大概原因就是出于安全考虑,这些字段尽量不要被改动。sun就做了这一套安全机制。

解决方法是在JVM启动时加入sun.NET.http.allowRestrictedHeaders属性为true。

First, the order of the headers is irrelevant.
Second, in order to manually override the host header you need to set sun.net.http.allowRestrictedHeaders=trueeither in code

直接在程序里面加下面代码。然后就OK了。

System.setProperty("sun.net.http.allowRestrictedHeaders", "true");

HttpURLConnection接口

http://www.cjsdn.net/doc/jdk50/java/net/HttpURLConnection.html

http://www.cnblogs.com/skyaccross/archive/2012/12/22/2828986.html

2. DoOutput和DoInput说明

httpUrlConnection.setDoOutput(true)

httpUrlConnection.setDoInput(true)

这两个方法在develope的httpUrlConnection方法中找不到的。

get请求用不到conn.getOutputStream(),因为参数直接追加在地址后面,因此默认是false。

post请求(比如:文件上传)需要往服务区传输大量的数据,这些数据是放在http的body里面的,因此需要在建立连接以后,往服务端写数据。

因为总是使用conn.getInputStream()获取服务端的响应,因此默认值是true。

时间: 2024-10-14 09:16:34

HttpURLConnection 411错误解决的相关文章

axis2 webservices 411错误解决办法

axis2 webservices 411错误解决办法 错误:org.apache.axis2.AxisFault: Transport error: 411 Error: Length Required 可能会导致这个问题的原因: 1.访问地址经过端口映射 2.http协议版本不同造成的,在 HTTP1.0中,服务器就会省略response头中的Content-Length而持续写数据出去,当服务器挂了的话,它简单地断开连接.而经典的 HTTP客户端会一直读数据直到碰到-1(传输结束的标识符)

Kafka的使用和错误解决

Kafka的使用和错误解决 一.下载kafka解压缩:配置环境变量 vim /etc/profile export KAFKA_HOME=/root/kafka_2.11-1.0.0 export PATH=$PATH:$KAFKA_HOME/bin source /etc/profile 二 .kafka中需要使用zookeeper 先将zookeeper启动,如果在伪分布式下,kafka已经集成了zk,在kafka中的config目录下. 可以编辑config/zookeeper.prope

This version of MySQL doesn&#39;t yet support &#39;LIMIT &amp; IN/ALL/ANY/SOME subquery&#39; 错误解决

原因是内层select语句带有limit子句. 原: update stu_score_childen A  set  A.fScore='-1' where  A.fID in (select B.fID from stu_score_childen B limit 0,50 ) 更改后的 update stu_score_childen A  set  A.fScore='-1' where  A.fID in (select C.fID from (select B.fID from st

【Oracle】ora-12541错误解决

ORA-12541: TNS无监听程序错误 1.在oracle安装目录下查找listener.ora和tnsnames.ora文件,然后打开 2.将host改为机器名 3.执行命令:lsnrctl stop,再执行lsnrctl start. [Oracle]ora-12541错误解决,布布扣,bubuko.com

Out of resources when opening file 错误解决

mysqldump: Got error: 23: Out of resources when opening file './mydb/tax_calculation_rate_title.MYD' (Errcode: 24) when using LOCK TABLES 看到这个后,我比较奇怪,备份时锁定表却出错,关键是这个数据库现在也没被使用啊 后来到网上查查找到了原因 在mysql配置文件 my.cnf 中 找到 open_files_limit 增加它的值就行了 我的原来是 open_

阿里云Windows server 2008服务器搭建VPN 图文教程,购买境外服务器自建vpn,Win8/win10 连接VPN被阻止,出现812错误解决方法

阿里云Windows server 2008服务器搭建VPN 图文教程(超详细) 第一步:购买阿里云服务器,本文使用的是Windows Server 2008 R2 企业版64位中文版 IP地址:47.88.151.129,所属节点:亚太(新加坡) 服务器配置:2核,4GB,带宽10Mbps 第二步: 打开服务器管理器,点击添加角色,如下图: 本帖隐藏的内容然后弹出如下图所示,点击下一步: 点击后,如下图,勾选网络策略和网络服务,然后点击下一步: 接着继续点击下一步,直到弹出如下图所示的页面,勾

no module named win32com.client 错误解决

no module named win32com.client错误解决 一.错误描述 运行import win32com.client 的时候发现有import Error  no module named win32com.client这个提示,表明该模块未安装. 二.下载模块 从  https://sourceforge.net/projects/pywin32/files/pywin32/  下载相应Python版本的模块.安装后问题即解决. pywin32-220.win-amd64-p

mysql Access denied for user [email&#160;protected]错误解决方法总结(转)

mysql Access denied for user [email protected]错误解决方法总结(转) mysql Access denied for user \'root\'@\'localhost\'”解决办法总结,下面我们对常见的出现的一些错误代码进行分析并给出解决办法,有需要的朋友可参考一下. 错误代码 1045 Access denied for user 'root'@'localhost' (using password:YES) 解决办法是重新设置root用户密码,

NFS网络文件系统服务配置、验证及错误解决

NFS网络文件系统服务配置.验证及错误解决 前期准备: 1.至少准备一台服务器(nfs-server)和一台客户机(nfs-client).老表测试用的服务器端用的系统是ubuntu,客户机用的是CentOS 6.5,所以有些地方操作不一样. 2.给两台测试机都安装NFS服务和rpc服务.(一般安装NFS服务会自动安装rpc) 安装: ubuntu:sudo apt-get install nfs-kernel-server CentOS:yum groupinstall "NFS file s