Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何使用OAuth和NSURLRequest从Twitter获取请求令牌?_Objective C_Twitter_Oauth - Fatal编程技术网

Objective c 如何使用OAuth和NSURLRequest从Twitter获取请求令牌?

Objective c 如何使用OAuth和NSURLRequest从Twitter获取请求令牌?,objective-c,twitter,oauth,Objective C,Twitter,Oauth,我正在尝试使用以下代码从twitter获取并请求令牌: NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; int length = 42; NSMutableString *nonce = [NSMutableString stringWithCapacity: length]; for (int i = 0; i < length; i++) { [nonc

我正在尝试使用以下代码从twitter获取并请求令牌:

NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int length = 42;
NSMutableString *nonce = [NSMutableString stringWithCapacity: length];
for (int i = 0; i < length; i++) {
    [nonce appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}

NSURL *requestTokenURL = [NSURL URLWithString:@"https://api.twitter.com/oauth/request_token"];
NSInteger numberOfSecs = round([[NSDate date]timeIntervalSince1970]);
NSString *timestampString = [NSString stringWithFormat:@"%i", numberOfSecs];

NSMutableDictionary *signingParams = [[NSMutableDictionary alloc]initWithCapacity:10];
[signingParams setObject:@"xxxxxxxxxxxxxxx" forKey:@"oauth_consumer_key"];
[signingParams setObject:[nonce copy] forKey:@"oauth_nonce"];
[signingParams setObject:@"HMAC-SHA1" forKey:@"oauth_signature_method"];
[signingParams setObject:timestampString forKey:@"oauth_timestamp"];
[signingParams setObject:@"1.0" forKey:@"oauth_version"];

NSMutableURLRequest *mURLRequest = [[NSMutableURLRequest alloc]initWithURL:requestTokenURL];
mURLRequest.HTTPMethod = @"POST";
NSString *callbackURLString = @"http://bytolution.com";
//that is one fat piece of code...
NSString *authenticationHeaderString = [NSString stringWithFormat:@"OAuth oauth_callback=\"%@\", oauth_nonce=\"%@\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"%@\", oauth_consumer_key=\"xxxxxxxxxxxxxxxxx\", oauth_signature=\"%@\", oauth_version=\"1.0\"", [callbackURLString URLEncodedString], nonce, timestampString, [BYOAuthSignatureString signatureStringWithParameters:signingParams URL:[mURLRequest.URL absoluteString] HTTPMethod:mURLRequest.HTTPMethod]];

[mURLRequest setValue:authenticationHeaderString forHTTPHeaderField:@"Authorization"];


NSHTTPURLResponse *urlResponse;
NSError *error;
NSData *responseData = [NSURLConnection sendSynchronousRequest:mURLRequest returningResponse:&urlResponse error:&error];
NSString *dataString = [[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"data: %@, response:%@, error: %@", dataString , urlResponse.allHeaderFields, error);
NSString*字母=@“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789”;
整数长度=42;
NSMutableString*nonce=[NSMutableString stringWithCapacity:length];
for(int i=0;i
BYOAuthSignatureString
创建签名来签署请求,我检查了请求的所有参数。它们应该根据Twitter的文档工作

但是我的日志说

data:验证oauth签名和令牌失败,响应:(null),错误:错误域=NSURLErrorDomain code=-1012“操作无法完成。(NSURLErrorDomain error-1012)。”UserInfo=0x20892200{NSErrorFailingURLKey=https://api.twitter.com/oauth/request_token,NSErrorFailingURLStringKey=https://api.twitter.com/oauth/request_token,NSUnderlyingError=0x20891ac0“该操作无法完成。(KCFerrorDomainCFN网络错误-1012)。”}


感谢您的帮助!

如果您可以不使用系统提供的用户Twitter帐户,您可能想看看苹果的社交和帐户框架,它们可以为您解决所有这些问题。@JesseRusak我已经使用过并学会讨厌它们了……感谢您与Stack上的每个人共享您的服务URL和Twitter OAuth密钥好的,那么,在这种情况下,您可能需要在这个测试服务器上尝试我们的代码:@JesseRusak非常感谢您的提示!服务器会返回一些东西,比如创建签名的正确的基本字符串。已经发现了一些错误…也许您想将您的注释作为一个答案发布,因为这样会更明显,而且我我可以投D票吗