为什么我的iphone应用程序无法连接到我的服务器?

时间:2012-04-30 05:02:00

标签: iphone rest networking get afnetworking

我有一个奇怪的问题。所以我一直在使用iphone应用程序,用户可以登录,登录后,应用程序会通过向服务器发出http GET请求来授权用户。如果用户名和密码正确,则返回授权令牌(典型的东西)。

奇怪的是,当我在本地测试它时,将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有效,但在部署到我的服务器时无效。

提前感谢!

1 个答案:

答案 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的任何人。