Objective c 如何使用OAuth和NSURLRequest从Twitter获取请求令牌?
我正在尝试使用以下代码从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
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票吗