ios - 连接到 iOS 中需要用户名和密码的 JSON API

标签 ios objective-c json cocoa

我有一个 URL,当在浏览器 (EG Safari) 中输入该 URL 请求用户名和密码时,响应 API 以 JSON 的形式返回。

现在我正在尝试在我的 iOS 应用程序中连接到此 API,以便我可以使用 JSON 数据,但我不确定我是否以正确的方式处理它。

NSString *post = [NSString stringWithFormat:@"&Username=%@&Password=%@",@"username",@"password"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];

NSString *string = [NSString stringWithFormat:@"jsonURL"];

NSURL *url = [NSURL URLWithString:string];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];

NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

if(connection)
{
   NSLog(@"connection success");
}
else
{
    NSLog(@"connection could not be made");
}

NSLog 将返回“连接成功”响应。但是,我似乎无法将 JSON 响应加载到 NSDictionary 或 NSArray 中。我在这里使用了 NSJSONSerialization。

NSMutableData *urlData;

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

urlData = [[NSMutableData alloc] init];
NSLog(@"DID RECEIVE RESPONSE %@", urlData);
}


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

[urlData appendData:data];

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSLog(@"FINISHED LOADING DATA %@", connection);

    NSError *jsonParsingError = nil;

    NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:urlData options:0 error:&jsonParsingError];

    if (jsonParsingError) {
    NSLog(@"JSON ERROR: %@", [jsonParsingError localizedDescription]);
}   else {
    NSLog(@"Parsed Object is %@", parsedObject);
  }

}

这是来自 NSLog 的 JSON 错误:“JSON 错误:操作无法完成。(Cocoa 错误 3840。)”

我哪里出错了?提前致谢。

最佳答案

 NSString *jsonstring = [NSString stringWithFormat:@"{\"userName\":\"%@\",\"password\":\"%@\",\"loginFrom\":\"2\",\"loginIp\":\"%@\"}",[username_text removequotes],[password_text removequotes],ipaddress];//The removeQuotes method is used to escape sequence the " to \" so that the json structure won't break. If the user give " in the username or password field and if we dint handle that the json structure will break and may give an expection.
NSLog(@"the json string we are sending is %@",jsonstring);
NSData *strdata = [json1  dataUsingEncoding:NSUTF8StringEncoding];
NSString *fixedURL =[NSString stringWithFormat:@"%@",loginURL];//the url is saved in loginURL variable.
NSURL *url = [NSURL URLWithString:fixedURL];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[request setHTTPMethod:@"POST"];
[request setHTTPBody: strdata];
conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (conn) {
    NSLog(@"Connected to service waiting for response");
}

使用 json Web 服务登录的示例代码

关于ios - 连接到 iOS 中需要用户名和密码的 JSON API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23650514/

相关文章:

ios - 无法控制 iPad 上的扬声器

ios - 解析实时查询处理错误

php - 如何从 Swift 应用程序访问 PHP 回显数据?

java.lang.NoSuchMethodError : org. apache.commons.lang.StringUtils.isBlank(Ljava/lang/String;)Z错误

objective-c - IOS照片库获取给定照片的相册名称

javascript - 将过滤应用于层次结构

ios - UIImageView 在以编程方式创建时显示离散图像

ios - 如何使用 Swift 在 iOS 上获取 ISO 639-2 国家代码

ios - 如何在 ios 中使用 afnetworking 3.0 显示进度条?

ios - 单击按钮时如何保存图像