对于PUT,我在HttpURLConnection中设置内容的长度.
urlConnection.setRequestProperty("Content-Length", "" + responseJSONArray.toString(2).getBytes("UTF8").length);
Run Code Online (Sandbox Code Playgroud)
实际的字节数是74.但是,当我查询urlConnection我返回的内容长度时-1.这是为什么?为什么长度不相等(假设我设定了这个)?
我必须设置内容长度,因为我收到了411服务器的响应.
(另外,在Sun的例子中,我看到第二个参数setRequestProperty是类型int而不是String,这看起来很奇怪.)
所以,我正在上传一个文件,然后下载它......但是上传标题中的Content-Length与文件大小不匹配.我猜这个计算和传输涉及到其他一些数据,但具体到底是什么?如何从Content-Length获得准确的文件大小?它甚至可能吗?
我知道有边界,也许还有其他一些东西,但检查一下:
5380216 - 5379906 = 310
"----WebKitFormBoundaryeoFyqD4zr6smwYDG".size
? 38
Run Code Online (Sandbox Code Playgroud)
所以边界大小是38 ... 310有一些5,10,31的LCD ...那些不管怎么用38以任何方式......我迷路了!
文件大小:
-rw-r--r--@ 1 williamcotton staff 5379906 Jul 2 12:02 testfile-downloaded.zip
-rw-r--r--@ 1 williamcotton staff 5379906 Jun 8 14:23 testfile-uploaded.zip
Run Code Online (Sandbox Code Playgroud)
HTTP标头
{
host: 'localhost:8887',
connection: 'keep-alive',
'content-length': '5380217',
'cache-control': 'max-age=0',
origin: 'http://localhost:8887',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1193.0 Safari/537.1',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundaryeoFyqD4zr6smwYDG',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
referer: 'http://localhost:8887/',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'en-US,en;q=0.8',
'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
}
Run Code Online (Sandbox Code Playgroud)
TL;博士
文件大小为5379906
Content-Length报告为5380216
为什么?
我有一些代码:
@RequestMapping(value = "/products/get", method = RequestMethod.GET)
public @ResponseBody List<Product> getProducts(@RequestParam(required = true, value = "category_id") Long categoryId) {
// some code here
return new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
我如何配置Spring MVC(或MappingJackson2HttpMessageConverter.class)来默认设置正确的标题Content-Length?因为现在我的响应标头content-length等于-1.
我正在努力加快以下方面的步伐:
string s; //--> s is never null
if (s.Length != 0)
{
<do something>
}
Run Code Online (Sandbox Code Playgroud)
问题是,看起来.Length实际上是对字符串中的字符进行计数,这比我需要的工作更多.有人知道如何加快速度吗?
或者,有没有办法确定s [0]是否存在,w/out检查字符串的其余部分?
在Django中,我尝试记录请求和响应内容长度,这与Django服务器打印到stderr的内容完全相同.
[05/Apr/2011 22:59:08] "GET /pages/ HTTP/1.1" 200 332161
[05/Apr/2011 22:59:15] "GET /pages/12 HTTP/1.1" 301 0
[05/Apr/2011 22:59:15] "GET /pages/12/ HTTP/1.1" 200 361474
[05/Apr/2011 22:59:16] "GET /pages/12/load/tags/ HTTP/1.1" 200 13899
[05/Apr/2011 22:59:16] "GET /pages/12/load/comments/ HTTP/1.1" 200 82
Run Code Online (Sandbox Code Playgroud)
所以,我写了一个简单的中间件如下,但是,'Content-Length'的值总是空的.
class LogHttpResponse(object):
def process_response(self, request, response):
import datetime
print response.items()
time_text = datetime.datetime.now().strftime('%m/%d/%Y %H:%M:%S')
print '[%s] "%s %s" %d %s' % (time_text, request.method, request.path,
response.status_code,
response.get('Content-Length', ''))
return response
Run Code Online (Sandbox Code Playgroud)
我通过fire-debug检查过,响应头中有'Content-Length'.但是中间件中没有"内容长度","print response.items()"显示:
[('Content-Type', 'text/html; charset=utf-8')]
Run Code Online (Sandbox Code Playgroud)
中间件订单有什么问题吗?
我正在开发一个实现HTTP客户端的Java程序.我测试它向服务器发送请求.GET,POST和DELETE请求正常工作.例如,在POST请求之后,我得到一个输出
Data extracted:
{"status":{"message":"ok"}}
Run Code Online (Sandbox Code Playgroud)
并且数据库反映了所做的更改.
在PUT请求之后,我得到以下指示错误的网页的html标记.
Data extracted:
<html>
<head><title>411 Length Required</title></head>
<body bgcolor="white">
<center><h1>411 Length Required</h1></center>
<hr><center>nginx/1.2.6</center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
因此数据库没有变化.
我发现这可能与Content-Length标题有关,但我不确定.尝试添加此标头后,我的程序等待一分钟然后抛出异常,通知它无法处理服务器响应.
如果需要,我还可以提供任何代码或堆栈跟踪.
我目前有一个看起来像这样的Javascript对象:
Object {0: 8, 1: 9, 2: 10}
我试图获取对象中的单个项目的数量(即3),但无法弄清楚如何这样做.由于对象不是数组,我不能只调用.length().我试图huntsList[2].toString().split('.').length用逗号分割项目并以这种方式计算它们但它返回1,因为它将整个对象转换为单个字符串,如下所示:["[object Object]"].
任何关于如何实现这一点的建议都表示赞赏.
我正在尝试创建一个改变Response.Filter类似的HttpModule (对于此演示,只需将过滤器设置回自身):
public class ContentTrafficMonitor : IHttpModule
{
public void Init( HttpApplication context )
{
context.BeginRequest += OnBeginRequest;
}
public void Dispose()
{
}
private static void OnBeginRequest( object sender, EventArgs e )
{
var application = (HttpApplication) sender;
application.Response.Filter = application.Response.Filter;
}
Run Code Online (Sandbox Code Playgroud)
}
这样做会将响应的传输编码设置为chunked,而不是使用Content-Length标头.
如果我删除设置的行Response.Filter,则响应确实有Content-Length标题.我们的应用程序取决于Content-Length标题,有什么方法可以防止这种行为?
当连接速度较慢的远程Web客户端无法发送带有multipart/form-data内容的完整POST请求但PHP仍然使用部分接收的数据来填充$_POST数组时,我遇到了问题.因此,$_POST数组中的一个值可能不完整,可能会丢失更多值.我首先尝试在Apache列表中提出相同的问题并得到一个答案,Apache不会缓冲请求体并将其作为巨型blob传递给PHP模块.
这是我的示例POST请求:
POST /test.php HTTP/1.0
Connection: close
Content-Length: 10000
Content-Type: multipart/form-data; boundary=ABCDEF
--ABCDEF
Content-Disposition: form-data; name="a"
A
--ABCDEF
Run Code Online (Sandbox Code Playgroud)
你可以看到这Content-Length是10000字节,但我只发送一个var a=A.
PHP脚本是:
<?php print_r($_REQUEST); ?>
Run Code Online (Sandbox Code Playgroud)
对于我的剩余请求,Web服务器等待大约10秒钟(但我没有发送任何内容),然后返回此响应:
HTTP/1.1 200 OK
Date: Wed, 27 Nov 2013 19:42:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u3
Vary: Accept-Encoding
Content-Length: 23
Connection: close
Content-Type: text/html
Array
(
[a] => A
)
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:如何在PHP中验证邮件请求是否已完全收到?$_SERVER['CONTENT_LENGTH']将从10000请求标题显示,但有没有办法检查收到的实际内容长度?
首先 - 一个非常简单的代码:
#!/bin/bash
a_string="string"
readarray -t a <<<"$a_string"
echo "${a[@]}"
echo "${#a[@]}"
# read empty string into array
emptystring=""
readarray -t b <<<"$emptystring"
echo "${b[@]}"
echo "${#b[@]}"
# and now - empty array
c=()
echo "${c[@]}"
echo "${#c[@]}"
Run Code Online (Sandbox Code Playgroud)
和输出
string
1
1
0
Run Code Online (Sandbox Code Playgroud)
因此,将空字符串读入 bash 数组时readarray -t会显示数组长度为 1。只有真正的空数组的长度才是 0。
我的问题 - 为什么会发生这种情况?
就我而言 - 这是我的脚本中的一个片段 - 执行 API 调用、获取 JSON 并应用 jq 过滤器:
URL_list_json=$(curl -s --request GET "$curl_request" --header "Authorization: Bearer ${token}")
readarray -t URL_names <<<"$(echo "$URL_list_json" …Run Code Online (Sandbox Code Playgroud) content-length ×10
http ×3
java ×3
android ×1
apache ×1
arrays ×1
asp.net ×1
bash ×1
c# ×1
django ×1
http-headers ×1
httpmodule ×1
httpresponse ×1
iis ×1
iis-7 ×1
indexing ×1
javascript ×1
jq ×1
json ×1
object ×1
php ×1
post ×1
put ×1
rest ×1
spring ×1
spring-mvc ×1
string ×1