我使用的是OAuthConsumer在我的iOS应用程序,它利用了的的tumblr API 。 一般制作API通话正常工作。 但是,我很难上传任何媒体。 当我请求所有的参数都是整数或字符串,我将它们添加就像这样:
[request setParameters:[NSArray arrayWithObjects:
[OARequestParameter requestParameterWithName:@"x_auth_username" value:username],
[OARequestParameter requestParameterWithName:@"x_auth_password" value:password],
nil]];
这显然不适用于如图像工作。 我想通了,我可能要发送这个数据multipart/form-data
,而不是application/x-www-form-urlencoded
,因此,它不会对OAuth的签名任何影响。 然而,据我所知道的,OAuthConsumer只支持x-www-form-urlencoded
(与相关的代码躺在NSMutableURLRequest+Parameters.m
)。 但是,我不知道这是否是正确的,如果是这样,我真的不知道如何修改Consumer
正确。 任何帮助,将不胜感激!
好吧,我想通了我自己。 有几个部分这一点,因为我看到有类似问题的其他人,我会去到全长:
首先,我是用OAuthConsumer过时的版本。 相反,使用的是版本的谷歌代码链接 ,您应该使用最新版本从GitHub ,因为它的装置包括发送多形式比它更弦。
现在,如果我不是完全错误的,你现在应该做理论上是这样的:
//Setup the request...
[request setParameters:params];
[request attachFileWithName:@"data" filename:@"photo.jpg" contentType:@"image/jpeg" data:dataProp.data];
//Setup the fetcher and send the request...
这将产生一个OAuth签名,其中包括只有oauth_...
开头的变量,将你所有的其他变量进入多形式。 这是应该的,并根据该文件,你应该罚款。 不幸的是,你是不是,tumblr将返回401错误,导致最有可能从一个无效的签名。
这里是你真正需要做的:
//Setup the request...
[request setParameters:params];
[request prepare]; //Whaaaat?
[request attachFileWithName:@"data" filename:@"photo.jpg" contentType:@"image/jpeg" data:dataProp.data];
//Setup the fetcher, make sure "prepare" isn't called again, send the request...
这将工作...同样,我敢肯定,这不是OAuth是应该如何处理这个问题,但至少它的工作原理。
tumblr的实现的OAuth是很奇怪我会说。 我发现为什么它是用于身份验证和博客请求(OK 见这里 )。 据我所知,的tumblr工作更好地与新的OAuth库( 这个 )。 我我自己白白花了一些时间试图让老OAuth的所有工作与ShareKit兼容性。 我找到了解决办法建议使用ASIFormDataRequest与OAuth认证信息(在签署这里最初发现 )。 是的,它看起来就像试图配种用的草蛇刺猬,但不知何故,对一张图像。 但是,修改这个代码后,我无法上传多张图片。 另一种方案是“TumblrUploadr” ,但它看起来有点太原始。