数据发布到 URL 时如何获取响应

Posted

技术标签:

【中文标题】数据发布到 URL 时如何获取响应【英文标题】:how to GET responses when data post to URL 【发布时间】:2014-07-31 10:48:36 【问题描述】:

我知道如何使用 POST 将数据(UITextField 值)发布到 JSON url。但现在我尝试使用 GET 方法将数据发布到服务器。我有 10 个文本字段。我尝试过这样的方式

NSString *post1 =[NSString stringWithFormat:@"?&dealImage=%@&dealcatid=%@&DeaTitle=%@&DealDesc=%@&price=%@&cityId=%@&StartDate=%@&EndDate=%@&FromTime=%@&ToTime=%@",
     strEncoded, string1 ,pTitle.text ,Description.text ,pPrice.text,string2,beginDate,endDate,beginTime,endTime];



     NSData *postData = [post1 dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];


     NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];


    NSLog(@"array array %@",postLength);

     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;


     [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.3.125:8090/SaveDollar/rest/deals/add"]]];


     NSLog(@"getData%@",request);

     [request setHTTPMethod:@"GET"];



     [request setValue:postLength forHTTPHeaderField:@"Content-Length"];


     [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];



     [request setHTTPBody:postData];

     NSLog(@"getData%@",request);

     con3 = [[NSURLConnection alloc]initWithRequest:request delegate:self];

     if(con3)
          
     webData3=[NSMutableData data];
     NSLog(@"Connection successfull");
     NSLog(@"GOOD Day My data %@",webData3);
     
     else
     
     NSLog(@"connection could not be made");
     



- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

   if (connection ==con3)
    
          [webData3 setLength:0];

    



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

    if (connection ==con3)
    
    [webData3 appendData:data];

    


-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
    if (connection ==con3) 
        NSLog(@"SOMETHING WENT WRONG WITH URL3");

    


   - (void)connectionDidFinishLoading:(NSURLConnection *)connection
   if (connection==con3)
      NSLog(@"Succeeded! Received %d bytes of data",[webData3 length]);
        NSLog(@"Data is %@",webData3);
         NSString *responseText = [[NSString alloc] initWithData:webData3 encoding: NSASCIIStringEncoding];
        NSLog(@"Response: %@", responseText);//holds textfield entered value
         NSString *newLineStr = @"\n";
        responseText = [responseText stringByReplacingOccurrencesOfString:@"<br />" withString:newLineStr];
        NSLog(@"ResponesText %@",responseText);
    
 

提交后控制台将显示此消息“URL3 出现问题” 我知道发布,但现在我还需要发布数据和获取响应。所以我使用了 GET 方法,但没有得到响应。所以请给我任何想法。然后请告诉我我的代码有什么问题。

【问题讨论】:

使用 POST Method Man,并检查你的字符串是否与服务器字符串匹配 【参考方案1】:

使用回调函数

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

如果调用失败,错误变量将帮助您了解问题所在,以便您自己解决。

将请求的内容类型字段设置为 application/json 可能也有帮助。

【讨论】:

感谢您的回复,我还添加了该方法 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error if (connection ==con3) NSLog(@"SOMETHING WENT WRONG与 URL3"); 提交按钮后控制台将显示“URL3 出现问题”消息 在方法的实现中将 ns 日志更改为 NSLog(@"Error: %@", error.description"); 仅仅打印它失败是没有意义的,试着看看它失败的实际原因通过查看 NSError。它可能能够告诉您出了什么问题。或者,在调试模式下运行代码并以这种方式查看变量。 thanks when place line NSLog(@"Error: %@", error.description"); 显示如下 Domain=kCFErrorDomainCFNetwork Code=303 "操作无法完成。 (kCFErrorDomainCFNetwork 错误 303。)“UserInfo=0x13786c60 NSErrorFailingURLKey=192.168.3.125:8090/SaveDollar/rest/deals/add, NSErrorFailingURLStringKey=192.168.3.125:8090/SaveDollar/rest/deals/add【参考方案2】:

您应该像这样收集响应数据:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

    _responseData = [[NSMutableData alloc] init];


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

    [_responseData appendData:data];


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

    // connection fail

其中数据为NSMutableData *_responseData;

【讨论】:

感谢我在这里放置的回复 if(con3) webData3=[NSMutableData data]; NSLog(@"连接成功"); NSLog(@"GOOD Day 我的数据%@",webData3); 我放在这里 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response if (connection ==con3) [webData3 setLength:0]; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data if (connection ==con3) [webData3 appendData:data]; 答案不是实际的,因为问题已经改变了

以上是关于数据发布到 URL 时如何获取响应的主要内容,如果未能解决你的问题,请参考以下文章

使用getJSON时,如何获取响应数据?

节点 JS AWS S3 文件上传。如何获取公共 URL 响应

使用 zoho 图像获取 api 时,如何在 react native 中解决图像数据响应为 null 的问题?

如何将图像存储在文件服务器中并获取远程 URL 以响应本机应用程序

如何从 url 获取键值 [重复]

django:如何获取HttpResponseRedirect的响应位置(url)