iOS Twitter SLRequest返回url域错误-1012



我正在尝试执行反向oauth以获取服务器的twitter访问令牌。

我已经想好了如何提交请求并接收响应,但当我这样做时,它会给我这个错误:

Error: The operation couldn’t be completed. (NSURLErrorDomain error -1012.)

我查了一下,上面写着这意味着用户已经取消了请求。我不确定这怎么可能,我也不知道如何解决它。

这是我的代码:

NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
    NSNumber *timeStampObj = [NSNumber numberWithDouble: timeStamp];
    NSString *oauth_nonce = [self genRandStringLength:32];
    NSString *oauth_timestamp = [timeStampObj stringValue];
    NSURL *feedURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/request_token"];
    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys: @"my key here", @"oauth_consumer_key", oauth_nonce, @"oauth_nonce", @"HMAC-SHA1", @"oauth_signature_method", oauth_timestamp, @"oauth_timestamp", @"1.0", @"oauth_version", @"reverse_auth", @"x_auth_mode", nil];
    SLRequest *twitterFeed = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:feedURL parameters:parameters];
    twitterFeed.account = self.userAccount;

    // Making the request
    [twitterFeed performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            // Check if we reached the reate limit
            if ([urlResponse statusCode] == 429) {
                NSLog(@"Rate limit reached");
                return;
            }
            // Check if there was an error
            if (error) {
                NSLog(@"The Error is: %@", error.localizedDescription);
                return;
            }
            // Check if there is some response data
            if (responseData) {
                NSLog(@"%@", responseData);
            }
        });
    }];

我一定错过了一些简单的东西,这让我无法完成一个项目。任何帮助都将是伟大的,谢谢!

错误代码-1012可能是由于身份验证问题。在我的案例中,"设置"中存在一个Twitter帐户,但由于某种原因没有登录。一旦我输入了帐户的密码,一切都很顺利。

当我向https://api.twitter.com/oauth/request_token标头中有一个额外的nonce和签名。具体来说,下面的代码给了我1012,但下一段代码成功了。此代码改编自Sean Cook的反向Twitter Auth示例。

/**
 *  The first stage of Reverse Auth.
 *
 *  In this step, we sign and send a request to Twitter to obtain an
 *  Authorization: header which we will use in Step 2.
 *
 *  @param completion   The block to call when finished. Can be called on any thread.
 */
- (void)_step1WithCompletion:(TWAPIHandler)completion
{
    NSURL *url = [NSURL URLWithString:TW_OAUTH_URL_REQUEST_TOKEN];
    NSDictionary *dict = @{TW_X_AUTH_MODE_KEY: TW_X_AUTH_MODE_REVERSE_AUTH,
                           TW_OAUTH_NONCE:[self nonce],
                           TW_SIGNATURE_METHOD: TW_SIGNATURE_METHOD_VALUE,
                           };
    TWSignedRequest *step1Request = [[TWSignedRequest alloc] initWithURL:url parameters:dict requestMethod:TWSignedRequestMethodPOST];
    TWDLog(@"Step 1: Sending a request to %@nparameters %@n", url, dict);
    [step1Request performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            completion(data, error);
        });
    }

以下工作。注意dict中的变化。

/**
 *  The first stage of Reverse Auth.
 *
 *  In this step, we sign and send a request to Twitter to obtain an
 *  Authorization: header which we will use in Step 2.
 *
 *  @param completion   The block to call when finished. Can be called on any thread.
 */
- (void)_step1WithCompletion:(TWAPIHandler)completion
{
    NSURL *url = [NSURL URLWithString:TW_OAUTH_URL_REQUEST_TOKEN];
    NSDictionary *dict = @{TW_X_AUTH_MODE_KEY: TW_X_AUTH_MODE_REVERSE_AUTH};
    TWSignedRequest *step1Request = [[TWSignedRequest alloc] initWithURL:url parameters:dict requestMethod:TWSignedRequestMethodPOST];
    TWDLog(@"Step 1: Sending a request to %@nparameters %@n", url, dict);
    [step1Request performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            completion(data, error);
        });
    }

最新更新