0

我查看了所有能找到的相关问题(搜索:“NSURLErrorDomain -1000”),但找不到解决方案。也许有老鹰眼的人可以帮助我。

我正在从 iOS 6 调用 Instagram API(但有效的部分已经在 iOS 5.1 中进行了)。我使用 Koolistov 的NSURL+PathParameters.h作为助手,我的理解是它确实转义了 URL 中必要的所有内容。

一些预备知识:

NSDictionary *parameters = nil;
NSURL *URL = [NSURL URLWithString:@"https://api.instagram.com/"];
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
    INSTAGRAM_CLIENT_ID, @"client_id", nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/tags/awesome/media/recent"];
URL = [URL URLByAppendingParameters:parameters];

INSTAGRAM_CLIENT_ID是一个包含我的应用程序客户端 ID 的宏。)

此 URL 按预期工作。

但是,如下构造的 URLNSURLErrorDomain始终为我提供 code = -1000(在设备上以及在 iPhone 5.1 和 6.0 模拟器上):

double latitude = 48.858844;
double longitude = 2.294351;
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                  [NSNumber numberWithDouble:latitude], @"lat",
                  [NSNumber numberWithDouble:longitude], @"lng",
                  [NSNumber numberWithInt:2000], @"distance",
                  INSTAGRAM_CLIENT_ID, @"client_id",
                  nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/media/search"];
URL = [URL URLByAppendingParameters:parameters];

然后我创建一个NSURLRequest

NSURLRequest *req = [NSURLRequest requestWithURL:URL];

如果我从 中打印出 URL NSURLRequest,看起来还不错:

https://api.instagram.com/v1/media/search?client_id=REDACTED&distance=2000&lat=48.858844&lng=2.294351

我正在使用MyDownloaderMatt Neuburg 的Programming iOS 5第 37 章。我创建了一个实例MyDownloader并将其传递给NSURLRequest

MyDownloader *downloader = [[MyDownloader alloc] initWithRequest:req];

根据RFC 3986,下划线或点不需要转义,我看不到任何其他要转义的内容,并且 NSURL+PathParameters.h 无论如何都应该处理转义。那么这里发生了什么?我错过了什么?

更奇怪的是,这种构建 URL 的更简单的方法也会产生相同的错误:

parameters = [NSDictionary dictionaryWithObjectsAndKeys:
    INSTAGRAM_CLIENT_ID, @"client_id", nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/media/popular"];

它看起来也不错:

https://api.instagram.com/v1/media/popular?client_id=REDACTED

所有这些 URL 都可以在Instagram API 控制台中使用,也可以直接在 Safari 中使用。这些 API 调用不需要 OAuth 身份验证,只需要客户端 ID。

如果有人能指出问题所在,我将不胜感激。

编辑:编码latlng值:

[[[NSNumber numberWithDouble:latitude] stringValue]
    stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

URL 或行为没有变化。但是当我用文字替换点时%2E,路径助手对百分号进行编码,导致%252E......

4

1 回答 1

0

解决了。上面显示的 URL 没有任何问题。问题在于周围的代码。我正在回答我自己的问题,以便使用 Instagram API 的人可能会从答案中受益。

事实证明,/v1/tags/tagname/media/recentAPI 的端点pagination在 JSON 响应中返回了一个对象,但/v1/media/search/v1/media/popular没有。从该对象内部,您可以找到下一批照片的 URL,其值名为next_url.

因为我没有正确阅读文档(而且有些地方有点混乱),而且不同的 Instagram API 端点的工作方式不同,所以我的代码希望next_url在所有这些情况下都能找到价值。因此,我得到的“错误 URL”NSURLConnection指的是第二个连接,而不是初始 URL。由于我没有意识到在其他两种情况下没有分页,我认为问题一定出在初始 URL 中。

于 2012-09-30T16:47:00.220 回答