如何解决Java HttpURLConnection:内容长度计算
| 我目前正在开发用于位桶问题RESTful API的库。我取得了不错的进展,现在我要解决“更新问题”一节,该节需要HTTP PUT请求。 现在,由于HTTP错误代码“ 0”,我陷入了困境。经过一番谷歌搜索,我发现了以下代码示例:// CORRECT: get a UTF-8 encoded byte array from the response
// String and set the content-length to the length of the
// resulting byte array.
String response = [insert XML with UTF-8 characters here];
byte[] responseBytes;
try {
responseBytes = response.getBytes(\"UTF-8\");
}
catch ( UnsupportedEncodingException e ) {
System.err.print(\"My computer hates UTF-8\");
}
this.contentLength_ = responseBytes.length;
现在我的问题是:什么是精确测量的?
查询字符串
urlencoded查询字符串
仅参数的值... ??
ѭ2是设置内容长度属性的合适方法吗?
实例赞赏。提前致谢。
编辑:
例如,您可以使用bitbucket Wiki条目中的以下curl示例来解释计算:
curl -X PUT -d \"content=Updated%20Content\" \\
https://api.bitbucket.org/1.0/repositories/Sarahmaddox/Sarahmaddox/issues/1/
解决方法
您正在执行请求,对。 content-length是请求正文的字节数。就你而言
int content-length = \"content=Updated%20Content\".getBytes(\"UTF-8\").length;
到底是什么测量?
url编码的查询字符串(在请求/实体正文中)
, 411上的HTTP规范:
服务器拒绝接受
没有定义内容的请求-
长度。客户可以重复
请求是否添加了有效的
Content-Length标头字段包含
消息正文中的长度
请求消息。
Content-Length标头上的HTTP规范:
内容长度实体标题字段
指示实体的大小,
OCTET的十进制数
关于HTTP实体长度的HTTP规范:
entity-body := Content-Encoding( Content-Type( data ) )
消息的实体长度是
消息正文之前的长度
传输编码已被应用。
总结一下,如果您要发送未压缩的UTF-8字符串,可以确定要发送的字节为:
Identity( UTF-8( \"content=Updated%20Content\" ) )
Content-Length设置为输出的字节数。
如果您要发送UTF-8数据,我也强烈建议您设置一个Content-Type标头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。