为什么我在向 Uber Sandbox 发送请求时会收到此错误消息? NSURLErrorDomain 错误-1012
Why am I getting this error posting a request to the Uber Sandbox? NSURLErrorDomain error -1012
我可以从产品路径中获取产品 ID,但是在尝试 post 向沙盒安排乘车请求时出现此错误。试图弄清楚我在这里做错了什么。我添加了不记名令牌。我不确定它想要什么或缺少什么。
Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x7f8c13939ed0 {NSErrorFailingURLStringKey=https://sandbox-api.uber.com/v1/requests, NSUnderlyingError=0x7f8c0ac78410 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)", NSErrorFailingURLKey=https://sandbox-api.uber.com/v1/requests}
func performPostUberRequest(url: NSURL, prodId: String) {
let params:[String: AnyObject] = [
"start_latitude" : "39.955715",
"start_longitude" : "-75.1680298",
"end_latitude" : "39.9542675",
"end_longitude" : "-75.1409609",
"product_id": prodId
]
var error: NSError?
var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.addValue("Bearer \(uberToken)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.allZeros, error: &error)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){
response, data, error in
if let error = error {
println(error)
} else if data != nil {
if let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? NSDictionary {
println(json)
}
}
}
}
根据您的评论:{ code = unauthorized; message = "Missing scope: request"; }
,您可能错过了范围,可以在您的 Uber 开发人员仪表板上指定,您在其中注册了应用程序并获得了密码和客户端 ID 等。
如果您这样做了,您应该在开始请求 authorization code
和 access token
到 OAuth2.0
时将必要的范围添加到参数中。
在我的实现中,范围指定如下:
[[NXOAuth2AccountStore sharedStore] setClientID:_clientID
secret:_clientSecret
scope:[NSSet setWithObjects:@"request", @"history_lite", @"profile", @"request_receipt", nil]
authorizationURL:[NSURL URLWithString:@"https://login.uber.com/oauth/authorize"]
tokenURL:[NSURL URLWithString:@"https://login.uber.com/oauth/token"]
redirectURL:[NSURL URLWithString:_redirectURL]
keyChainGroup:nil
forAccountType:_applicationName];
我可以从产品路径中获取产品 ID,但是在尝试 post 向沙盒安排乘车请求时出现此错误。试图弄清楚我在这里做错了什么。我添加了不记名令牌。我不确定它想要什么或缺少什么。
Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x7f8c13939ed0 {NSErrorFailingURLStringKey=https://sandbox-api.uber.com/v1/requests, NSUnderlyingError=0x7f8c0ac78410 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)", NSErrorFailingURLKey=https://sandbox-api.uber.com/v1/requests}
func performPostUberRequest(url: NSURL, prodId: String) {
let params:[String: AnyObject] = [
"start_latitude" : "39.955715",
"start_longitude" : "-75.1680298",
"end_latitude" : "39.9542675",
"end_longitude" : "-75.1409609",
"product_id": prodId
]
var error: NSError?
var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.addValue("Bearer \(uberToken)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.allZeros, error: &error)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){
response, data, error in
if let error = error {
println(error)
} else if data != nil {
if let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? NSDictionary {
println(json)
}
}
}
}
根据您的评论:{ code = unauthorized; message = "Missing scope: request"; }
,您可能错过了范围,可以在您的 Uber 开发人员仪表板上指定,您在其中注册了应用程序并获得了密码和客户端 ID 等。
如果您这样做了,您应该在开始请求 authorization code
和 access token
到 OAuth2.0
时将必要的范围添加到参数中。
在我的实现中,范围指定如下:
[[NXOAuth2AccountStore sharedStore] setClientID:_clientID
secret:_clientSecret
scope:[NSSet setWithObjects:@"request", @"history_lite", @"profile", @"request_receipt", nil]
authorizationURL:[NSURL URLWithString:@"https://login.uber.com/oauth/authorize"]
tokenURL:[NSURL URLWithString:@"https://login.uber.com/oauth/token"]
redirectURL:[NSURL URLWithString:_redirectURL]
keyChainGroup:nil
forAccountType:_applicationName];