大佬教程收集整理的这篇文章主要介绍了无法在iOS OAuth1.0,OAConsumer客户端上发布tumblr,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
{"Meta":{"status":401,"msg":"Not Authorized"},"response":[]}
我正在使用iOS的OAuthConsumer客户端,如果是MGTwitterENGIne我已经提取过了.
这就是我尝试过的.
#import "ViewController.h" #define consumer_key @"u9iZvT8KIlrTtUrh3vUeXXXXXXXXXXXXXAfgpThGyom8Y6MKKCnU" #define consumer_secret @"xfA10mQKmALlpsnrFXXXXXXXXXXXXXXXXXXXXXXXXXX" #define request_token_url @"http://www.tumblr.com/oauth/request_token" #define access_token_url @"http://www.tumblr.com/oauth/access_token" #define authorize_url @"http://www.tumblr.com/oauth/authorize?oauth_token=%@" #define base_url @"http://api.tumblr.com/v2/user/XXXXXXXXXXXXX.tumblr.com/info" #define user_info @"http://api.tumblr.com/v2/user/info" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBACtion)postIt:(id)sender { NSURL *postuRL = [NSURL URLWithString:@"http://api.tumblr.com/v2/blog/xxxxxxxx.tumblr.com/post"]; OAMutableURLrequest *orequest = [[OAMutableURLrequest alloc] initWithURL:postuRL consumer:self.consumer token:self.accessToken realm:nil signatureProvider:nil]; [orequest sethttpR_364_11845@ethod:@"POST"]; [orequest SETVALue:@"application/x-www-form-urlencoded" forhttpHeaderField:@"Content-Type"]; OArequestParameter *statusParam = [[OArequestParameter alloc] initWithName:@"body" value:@"Sample Body"]; OArequestParameter *statusParam2 = [[OArequestParameter alloc] initWithName:@"type" value:@"text"]; NSArray *params = [NSArray arrayWithObjects:statusParam,statusParam2,nil]; [orequest setParameters:params]; OAAsynchronousDataFetcher *fetcher = [OAAsynchronousDataFetcher asynchronousFetcherWithrequest:orequest delegate:self didFinishSELEctor:@SELEctor(sendStatusTicket:didFinishWithData:) didFailSELEctor:@SELEctor(sendStatusTicket:didFailWithError:)]; NSLog(@"URL = %@",[orequest.URL absoluteString]); [fetcher start]; } - (void)didReceiveAccessToken:(OAserviCETicket *)ticker data:(NSData *)responseData { } - (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error { // ERROR! } - (void)sendStatusTicket:(OAserviCETicket *)ticker didFinishWithData:(NSData *)responseData { if (ticker.didSucceed) { NSLog(@"success"); } NSString *responseBody = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"Description = %@",responseBody); } - (void)sendStatusTicket:(OAserviCETicket *)ticker didFailWithError:(NSError *)error { NSLog(@"Error = %@",[error localizedDescription]); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } - (IBACtion)login:(id)sender { self.consumer = [[OAConsumer alloc] initWithKey:consumer_key secret:consumer_secret]; NSURL *url = [NSURL URLWithString:request_token_url]; OAMutableURLrequest *request = [[OAMutableURLrequest alloc] initWithURL:url consumer:self.consumer token:nil // we don't have a Token yet realm:nil // our service provider doesn't specify a realm signatureProvider:nil]; // use the default method,HMAC-SHA1 [request sethttpR_364_11845@ethod:@"POST"]; OADataFetcher *fetcher = [[OADataFetcher alloc] init]; [fetcher fetchDataWithrequest:request delegate:self didFinishSELEctor:@SELEctor(requestTokenTicket:didFinishWithData:) didFailSELEctor:@SELEctor(requestTokenTicket:didFailWithError:)]; } - (void)requestTokenTicket:(OAserviCETicket *)ticket didFinishWithData:(NSData *)data { if (ticket.didSucceed) { NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; self.accessToken= [[OAToken alloc] initWithhttpResponseBody:responseBody]; NSURL *author_url = [NSURL URLWithString:[ NSString StringWithFormat:authorize_url,self.accessToken.key]]; OAMutableURLrequest *oaR = [[OAMutableURLrequest alloc] initWithURL:author_url consumer:nil token:nil realm:nil signatureProvider:nil]; UIWebView *webView =[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].bounds]; [[[UIApplication sharedApplication] keyWindow] addSubview:webView]; webView.delegate=self; [webView loadrequest:oaR]; } } // This is to get oAuth_verifier from the url - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithrequest:(NSURLrequest*)request navigationType:(UIWebViewNavigationTypE)navigationType { NSString *url = [[request URL] absoluteString]; NSString *keyOne = @"oauth_token"; NSString *keyTwo = @"oauth_verifier"; NSRange r1 =[url rangeOfString:keyOne]; NSRange r2 =[url rangeOfString:keyTwo]; if (r1.LOCATIOn!=NsnotFound && r2.LOCATIOn!=NsnotFound) { // Extract oauth_verifier from URL query NSString* verifier = nil; NSArray* urlParams = [[[request URL] query] componentsSeparatedByString:@"&"]; for (NSString* param in urlParams) { NSArray* keyValue = [param componentsSeparatedByString:@"="]; NSString* key = [keyValue objectATindex:0]; if ([key isEqualToString:@"oauth_verifier"]) { verifier = [keyValue objectATindex:1]; break; } } if (verifier) { NSURL* accessTokenUrl = [NSURL URLWithString:@"http://www.tumblr.com/oauth/access_token"]; OAMutableURLrequest* accessTokenrequest =[[OAMutableURLrequest alloc] initWithURL:accessTokenUrl consumer:self.consumer token:self.accessToken realm:nil signatureProvider:nil]; OArequestParameter* verifierParam =[[OArequestParameter alloc] initWithName:@"oauth_verifier" value:verifier]; [accessTokenrequest sethttpR_364_11845@ethod:@"POST"]; [accessTokenrequest setParameters:[NSArray arrayWithObjects:verifierParam,nil]]; OADataFetcher* dataFetcher = [[OADataFetcher alloc] init]; [dataFetcher fetchDataWithrequest:accessTokenrequest delegate:self didFinishSELEctor:@SELEctor(requestTokenTicketForAuthorization:didFinishWithData:) didFailSELEctor:@SELEctor(requestTokenTicket:didFailWithError:)]; } else { // ERROR! } [webView removeFromSuperview]; return NO; } return YES; } - (void)requestTokenTicketForAuthorization:(OAserviCETicket *)ticket didFinishWithData:(NSData *)data { if (ticket.didSucceed) { NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; self.accessToken = [self.accessToken initWithhttpResponseBody:responseBody]; accessText=self.accessToken.key; accessSecret=self.accessToken.secret; } else { NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"Response = %@",responseBody); } } - (void)requestTokenTicket:(OAserviCETicket *)ticket didFailWithError:(NSError *)error { NSLog(@"Error = %@",[error localizedDescription]); } @end
>您是否能够使用oauth’GET’请求,例如“http://api.tumblr.com/v2/user/info”?
如果您可以收到成功的“GET”请求,那么您的访问令牌有效,您可以查看您发送帖子参数的方式.
>确保您将参数作为http正文以及签名参数传递.库可能提供正确的参数排序.
NSString * postbody = @“body = myBodyText& type = text”;
[orequest sethttpBody:[postbody dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:TRUE]];
以上是大佬教程为你收集整理的无法在iOS OAuth1.0,OAConsumer客户端上发布tumblr全部内容,希望文章能够帮你解决无法在iOS OAuth1.0,OAConsumer客户端上发布tumblr所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。