【问题标题】:AFNetworking 2 GET with JSON responseAFNetworking 2 GET 与 JSON 响应
【发布时间】:2014-02-28 11:15:41
【问题描述】:

我正在构建一个应该返回 JSON 对象的简单 GET 函数。使用 AFNetworking 2. 代码可以编译,但我无法确定运行时错误的来源。 难道服务器上的 content-type: 是 text/html 并且我期望 jsonobj. 服务器使用“基本用户:id”标头,我应该将它添加到 setValue forHttpHeaderField 吗?

    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://the website.com"]];
    manager.securityPolicy.allowInvalidCertificates = YES;
    [manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];
    [manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"user" password:@"pass"];   
    [manager GET:@"/api/data/interval?month" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@" Yep %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@" Nope %@", error);
    }];

这是我得到的错误

 Nope Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: forbidden (403)" UserInfo=0x8a9dec0 {NSErrorFailingURLKey=http://thewebsite.com/api/data/interval?month, NSLocalizedDescription=Request failed: forbidden (403), NSUnderlyingError=0x8a99e00 "Request failed: unacceptable content-type: text/html", AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x8bb0ac0> { URL: http://thewebsite.com/api/data/interval?month } { status code: 403, headers {
    Connection = "keep-alive";
    "Content-Encoding" = gzip;
    "Content-Language" = "";
    "Content-Type" = "text/html";
    Date = "Tue, 04 Feb 2014 13:02:12 GMT";

【问题讨论】:

  • 检查您的网址http://thewebsite.com/api/data/interval?month
  • 检查您的网址,因为错误表明,您尝试访问的内容被禁止

标签: ios get afnetworking-2


【解决方案1】:

首先你必须初始化你的基本 url。类似于:

 NSURL *baseURL = [NSURL URLWithString:@"www.abv.bg"];

之后,您创建相对路径,如:

NSString *path = @"/Path/to/somewhere";

最后像这样初始化 URL 字符串:

NSString *absoluteURL = [[NSURL URLWithString:path relativeToURL:baseURL] absoluteString];

现在你可以执行请求了,你知道,那个 URL 是正确的:

[manager GET:absoluteURL parameters:nil  success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@" Yep %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@" Nope %@", error);
}];

在您的解决方案中,您尝试执行请求以地址 @"/api/data/interval?month" 而不是真正的 URL。 HTH。

【讨论】:

  • 很高兴在这里看到更多保加利亚 iOS 开发人员。我浏览了我的代码,但效果很好,我发现不需要使用服务器的基本身份验证进行 base64 编码,并且 setAuthorizationHeaderFieldWithUsername 方法强制执行它。
猜你喜欢
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2021-05-27
  • 2015-07-02
相关资源
最近更新 更多