奇怪的是,当我在本地测试它时,将http请求URL指向我的本地机器,它工作正常。一切都正确授权,所有数据都正确返回。
但今天,我的应用程序足够稳定,我决定将rest api部署到我的服务器,但是当将http请求URL更改为我的服务器url时,请求失败。
我想也许服务器没有正确部署所以我用firefox rest客户端测试了http端点,一切似乎都在工作,授权工作,数据被返回。
有没有人有任何想法?我很遗憾问题可能是什么。
我正在使用AFNetworking库来发出请求。
这是我的代码:
self.apiHttpClient = [[TKRHttpClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://mywebsite.com/api"]];
--------------
NSString *username = [usernameField text];
NSString *password = [passwordField text];
TKRHttpClient *httpClient = [TKRHttpClient sharedInstance];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"/user/auth" parameters:nil];
[request addValue:username forHTTPHeaderField:@"username"];
[request addValue:password forHTTPHeaderField:@"password"];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
if(response.statusCode == 200){
NSDictionary * headers = [response allHeaderFields];
NSString *token = [headers objectForKey:@"auth_token"];
NSLog(@"token was %@", token);
[[AppController sharedAppController] initializeDataForUserToken:token];
}else{
NSLog(@"upload failed!");
}
} failure:^(NSURLRequest *request , NSHTTPURLResponse *response , NSError *error , id JSON ) {
NSLog(@"code was: %i", response.statusCode);
if(response.statusCode == 401){
[errorMessage setText:@"Incorrect password or username"];
}
}];
[operation start];
我输入了断点,似乎请求直接进入故障块。显示“NSLog(@”代码为:%i“,response.statusCode)的行;”在故障块中输出200.但是当我在我的服务器上拖尾时,没有收到任何请求。
任何帮助将不胜感激。无法弄清楚为什么它会对我的本地tomcat有效,但在部署到我的服务器时无效。
提前感谢!
答案 0 :(得分:0)
由于@ Brad的建议,我找到了解决问题的原因。
在检查查尔斯的请求后,我发现请求是以" http://mywebsite.com" ;,然后路径为/ user / auth。所以" / api"部分失踪。
也许这是标准,我不知道,但似乎AFHTTPClient(我的TKRHttpClient扩展AFHTTPClient)initWithBaseURL实际上意味着主机URL。 " / api"部分被砍掉了。
以及它在本地工作的原因是因为我在本地以root身份部署了应用程序,因此没有" / api"
有两种解决方法。 1.以root身份将app重新部署到服务器。或2.更改代码行:
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"/user/auth" parameters:nil];
TO:
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:@"api/user/auth" parameters:nil];
希望这有助于将来使用AFNetworking的任何人。