我查看了所有能找到的相关问题(搜索:“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
我正在使用MyDownloader
Matt 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。
如果有人能指出问题所在,我将不胜感激。
编辑:编码lat
和lng
值:
[[[NSNumber numberWithDouble:latitude] stringValue]
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
URL 或行为没有变化。但是当我用文字替换点时%2E
,路径助手对百分号进行编码,导致%252E
......