【发布时间】:2023-03-28 07:55:01
【问题描述】:
我有一个 sharedClient 请求一个 URL
#define BASE_URL @"http://myurl.com"
+ (id)sharedClient {
static MyClient *__instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURL *baseUrl = [NSURL URLWithString:BASE_URL];
__instance = [[MyClient alloc] initWithBaseURL:baseUrl];
});
return __instance;
}
然后我在按下按钮时在视图控制器中调用它
id params = @{
@"username": self.usernameField.text,
@"password": self.passwordField.text
};
[[MyClient sharedClient]getPath:@"/users/current.json"
parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *authToken = [responseObject objectForKey:@"api_key"];
[self.credentialStore setAuthToken:authToken];
[SVProgressHUD dismiss];
[self dismissViewControllerAnimated:YES completion:nil];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%ld", (long)operation.response.statusCode);
if (operation.response.statusCode == 500) {
[SVProgressHUD showErrorWithStatus:@"Something went wrong!"];
} else {
NSData *jsonData = [operation.responseString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData
options:0
error:nil];
NSString *errorMessage = [json objectForKey:@"error"];
[SVProgressHUD showErrorWithStatus:errorMessage];
}
}];
此代码可以正常工作,但我的问题是我尝试访问的 API 有点奇怪。您必须在 url 之前传递用户名和密码。像这样
http://username:password@myurl.com
我将如何在 URL 的 http 之前传递参数?
【问题讨论】:
-
据我所知,这是一种通过 URL 传输用户名和密码的标准(但不安全)机制。
[NSURL URLWithString:@"http://username:password@myurl.com"]应该可以正常工作。 -
如何使用户名和密码动态化?换句话说,我会传递用户名和密码吗?
-
如果你的目标是 iOS 7 及更高版本,NSURLComponents 是最好的选择。
-
@FilipRadelic 我的目标是 iOS7 及更高版本,你有这方面的例子吗?
标签: ios objective-c afnetworking