Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios HTTP状态代码411-需要长度_Ios_Objective C_Nsurlconnection_Nsurlrequest_Http Status Code 411 - Fatal编程技术网

Ios HTTP状态代码411-需要长度

Ios HTTP状态代码411-需要长度,ios,objective-c,nsurlconnection,nsurlrequest,http-status-code-411,Ios,Objective C,Nsurlconnection,Nsurlrequest,Http Status Code 411,我尝试从服务器获取数据。我使用NSURLConnectionLegate、NSURLConnectionDataDelegate。有代码(目标-C) 当我使用 [request setHTTPBodyStream:stream]; [request setHTTPBody:reqData]; 我试过了 [request setHTTPBodyStream:stream]; NSString *postLength = [NSString stringWithFormat:@"%d", [re

我尝试从服务器获取数据。我使用NSURLConnectionLegate、NSURLConnectionDataDelegate。有代码(目标-C)

当我使用

[request setHTTPBodyStream:stream];
[request setHTTPBody:reqData];
我试过了

[request setHTTPBodyStream:stream];
NSString *postLength = [NSString stringWithFormat:@"%d", [reqData length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
但还是“HASH(someAdddress)”

我做错了什么? 对不起我的英语。谢谢:)

我做错了什么

没什么

无论出于何种原因,当服务器拒绝接受没有内容长度头的消息时,HTTP状态代码411(需要长度)作为响应发送

服务器可能只接受也可能不接受没有内容长度头的内容

当您通过属性为请求设置
NSInputStream
对象作为请求正文时,
NSURLConnection
无法再计算正文本身的长度。(流没有属性
length
)。因此,
NSURLConnection
使用某种“传输模式”,即“分块传输编码”。此传输模式应能成功传输任何正文,且不需要Content Legth标头(实际上不得包含标头)。唉,服务器根本不接受这种类型的传输

另见:(维基)

要解决客户端的问题,请执行以下操作:

  • 自己确定正文的长度(如果可能的话),并为请求设置“contentlength”头字段。如果此输入流是从文件或
    NSData
    对象创建的,则可以轻松确定长度。但一定要设置与实际流内容完全相同的长度(以字节为单位)

  • 不要使用
    NSInputStream
    ,而是使用
    NSData
    对象作为主体,并通过属性
    HTTPBody
    进行设置。将正文设置为
    NSData
    对象时,
    NSURLConnection
    可以确定内容长度本身,它将自动添加长度正确的内容长度标题,除非您在请求中自行设置


我在做
POST
时遇到了同样的错误,而我本应该做
GET
[request setHTTPBodyStream:stream];
NSString *postLength = [NSString stringWithFormat:@"%d", [reqData length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];