0

这是我的代码,它使用 POST 请求来检索数据,但我无法获得所需的结果。url 没有问题,因为它在浏览器上显示 JSON 输出。

NSString *urlString = @"my url string";                      
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];          
[request setURL:[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];       
[request setHTTPMethod:@"POST"];

NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"email_string\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n",allIOSContactsEmailAddresses] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    if (data!=nil)
    {
        NSArray* array=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        NSLog(@"array=%@",array);
    }        
}];

它在控制台中显示 array=(null) ..

4

2 回答 2

1

我只是尝试使用您的代码,它成功了,没有任何问题。

因此,您的问题在于您将请求发送到的服务器,或者您的 NSURLConnection 委托方法中没有正确实现。

您还应该发布发送代码(NSURLConnection 用法)。

于 2013-10-17T13:14:35.683 回答
1

您的多部分消息正文设置不正确。

在最后一部分(你只有一个)之后,需要有一个“关闭边界分隔符”。因此,在为请求设置正文之前,您需要附加分隔符:

 [body appendData:[[NSString stringWithFormat:@"\r\n--%@--", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

严格来说,没有必要用 CRLF ("\r\n") 来关闭“close-boundary-delimiter”。

无需在实际正文值(allIOSContactsEmailAddresses)前面加上 CRLF(您没有)。此 CRLF 将被视为正文内容。实际上,这会使消费者感到困惑。

相反,对于文本正文,有时可能需要关闭CRLF (取决于服务器)。

请注意,添加标题时,必须用 CRLF 关闭它(就像您所做的那样)。为了关闭标题区域,需要关闭 CRLF。关于这一点,您的信息是正确的。

于 2013-10-17T13:49:11.673 回答