【问题标题】:Post request is not working but working fine in Browser?发布请求不起作用但在浏览器中工作正常?
【发布时间】:2013-10-17 12:31:26
【问题描述】:

这是我的代码,它使用 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)..

【问题讨论】:

  • 查看网址中是否有空格或特殊字符
  • 网址中没有空格或特殊字符,我也在进行字符串编码
  • 你得到什么回应?你有错误吗?另请发布发送请求的代码。
  • 这段代码无法连接到php..
  • 所以在为POST请求编写上述代码时一定有一些错误,但我找不到那个..

标签: ios json http-post


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多