【问题标题】:Form Data Request using NSURLConnection in iOS在 iOS 中使用 NSURLConnection 表单数据请求
【发布时间】:2012-02-27 06:19:07
【问题描述】:

我想在 iOS 中使用 NSURLConnection 发布 http 表单。我在 HTML 表单中有两个表单字段和一个文件上传选项。当我使用NSURLConnection 做同样的事情时,我没有得到回应。

NSString *urlString = @"http://url/test.php";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data"];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"file\"; filename=\"myphoto.png\"rn"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-streamrnrn"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:filedata];
[body appendData:[[NSString stringWithFormat:@"&s=YL4e6ouKirNDgCk0xV2HKixt&hw=141246514ytdjadh"] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"RETURNED:%@",returnString);

但是当我使用ASIHTTPRequest 并编写以下代码时,它正在工作并且我得到了响应。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://url/test.php"]];
[request setPostValue:@"YL4e6ouKirNDgCk0xV2HKixt&hw" forKey:@"ssf"];
[request setPostValue:@"141246514ytdjadh" forKey:@"sds"];
[request setData:filedata withFileName:@"myphoto.png" andContentType:@"image/jpeg"  forKey:@"file"];
[request startSynchronous];

NSError *error = [request error];
if (!error) {
    NSString *response = [request responseString];
    NSLog(@"response:%@",response);
}

谁能告诉我NSURLConnection 部分做错了什么?

【问题讨论】:

  • @dbrajkovic 如果我做错了什么,你能建议我吗

标签: ios objective-c nsurlconnection


【解决方案1】:

您没有复制该链接的示例。在该教程中,HTTPBody 参数应该是 NSData 的实例,而不是 NSString。

[request setHTTPMethod:@"POST"]; 
NSString *myString = [NSString stringWithFormat:@"value1=test3&value2=test"];
[request setHTTPBody:[myString dataUsingEncoding:NSUTF8StringEncoding]];

【讨论】:

  • 其实我在stack里面写错了,我编辑了
  • 我也没有得到那个边界部分。
  • 没有得到边界怎么办?它是一个指向 NSString 实例的指针。
  • 服务器有什么功能?是必需的吗?我必须以 html 形式发布 2 个变量和一个图像文件上传选项。你能给我什么是代码只是请求部分。
  • 代码和解释都在那个教程中。需要我在这里重新输入吗?如果您无法理解发生了什么,我认为您应该更多地了解您正在尝试做的事情背后的概念。简单地复制代码对你没有帮助。
【解决方案2】:

我尝试使用此代码上传图像及其工作。添加了边界。

NSString *urlString = @"URL";

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

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

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"Test.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

NSData *returnData = [NSURLConnection  sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

【讨论】:

    【解决方案3】:

    这对我来说很好。

     - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        NSMutableURLRequest *req=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http:///URL/iinsert.php"]];
    
        NSString *myreqstr=@"name=abhii&address=knrr";
        NSData *myreqdata=[NSData dataWithBytes:[myreqstr UTF8String] length:[myreqstr length]];
        [req setHTTPMethod:@"POST"];
    
        [ req setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
        [ req setHTTPBody: myreqdata ];
    
        //[req setValue:@"abhii" forHTTPHeaderField:@"name"];
        //[req setValue:@"kar" forHTTPHeaderField:@"address"];
        NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
        NSLog(@"%@",data);
        NSString *returnstring=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"%@",returnstring);
    
    
    
    
        // Do any additional setup after loading the view, typically from a nib.
    }
    

    【讨论】:

      【解决方案4】:

      试试这个....

      NSURL *url = [NSURL URLWithString:@"URL"];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      
      [request setHTTPMethod:@"POST"];
      
      
      NSString *myRequestString =@"Request string";
      NSLog(@"%@",myRequestString);
      NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ];
      
      [ request setHTTPBody: myRequestData ];
      
      NSURLResponse *response;
      NSError *err;
      NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
      NSString *content = [NSString stringWithUTF8String:[responseData bytes]];
      

      【讨论】:

      • 我想我也做过同样的事情。你能告诉我代码有什么不同吗。
      【解决方案5】:

      你有几个

      rn
      

      在你的字符串的末尾。他们都应该是

      \r\n
      

      更准确地说应该是:

      [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"file\"; filename=\"myphoto.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
      [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
      

      【讨论】:

        猜你喜欢
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 2019-03-09
        相关资源
        最近更新 更多