HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法在iOS OAuth1.0,OAConsumer客户端上发布tumblr大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将“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

在这里犯的错误是什么?为什么我收到这个错误?我是否正确地遵循了这些步骤?

@L_696_7@

请XXX出你的consumer_key和consumer_secret以避免不必要的使用它们.
代码方面,你可能想要在这里寻找一些东西.

>您是否能够使用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,请注明来意。