如何进行经过身份验证的服务调用
Posted
技术标签:
【中文标题】如何进行经过身份验证的服务调用【英文标题】:How to do authenticated service call 【发布时间】:2012-05-24 13:32:47 【问题描述】:您好,我正在尝试连接到某些服务器,该服务器将使用用户名和密码作为凭据。以下是我正在使用的代码。 NSString post =[[NSString alloc] initWithFormat:@"userName=*&password=*"]; NSURL url=[NSURL URLWithString:@"******"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSLog(@"request:%@",request);
urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
这里的问题是服务器给用户的消息无效。但是我给的凭据很好。这个用户名和密码没有进入请求对象..你们中的任何一个都可以帮助我..
【问题讨论】:
【参考方案1】:您需要以包含您的用户名和密码的字符串开头。这将形成 http POST 正文。您需要将 username_input_field 和 password_input_field 替换为网络服务器的正确输入字段名称。我的建议是使用 Firefox 和 httpFox 扩展来登录你的网络服务器。 httpFox 将显示请求的所有输入字段名称。您可能还需要添加额外的隐藏字段。
NSString *post = [NSString stringWithFormat:
@"username_input_field=%@&password_input_field=%@",username,password];
【讨论】:
感谢盖子。但是这个 URL 有点不同,它无法从浏览器端连接..只有代码才有可能。 请任何人建议我如何使用连接类型为保持活动状态进行 Web 服务调用。提前致谢。 我得到了这个问题的答案。我们要做的是在请求对象[request addValue:@"Keep-alive" forKey:@"Connection"]中添加如下连接类型。 .. 不,NSmutablerequest 委托会继续调用,直到您停止应用程序。【参考方案2】:将用户名添加到请求头对象中,如下所示:
[request addValue:@"<username>" forKey:@"<username parameter>"]
【讨论】:
以上是关于如何进行经过身份验证的服务调用的主要内容,如果未能解决你的问题,请参考以下文章
通过 OAuth 对 Google API 进行经过身份验证的调用时遇到问题
我如何通过 .net 远程调用模拟经过 Windows 身份验证的 Web 用户?