如何进行经过身份验证的服务调用

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 用户?

Quarkus:如何在微服务之间进行身份验证?

身份验证质询后未调用 URLSession 委托

如何从 android 客户端进行经过身份验证的 django rest api 调用?

使用有效的 JWT 令牌调用经过 keycloak 身份验证的 API