使用iOS的OAuthConsumer将图像上传到tumblr
我在使用Tumblr API的 iOS应用程序中使用了OAuthConsumer 。 在一般的API调用工作正常。 但是,我很难上传任何媒体。 当我的请求的所有参数都是整数或string时,我就像这样添加它们:
[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版本。 不要使用在Google Code上链接的版本,而应该使用github中最近的版本,因为它包含了发送多个string的多部分表单的方法。
现在,如果我不是完全错误的话,你现在理论上应该做的是:
//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_...
variables的oAuth签名,将所有其他variables放入多部分forms。 这是应该的,根据文件,你应该没问题。 不幸的是,你不是,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应该如何处理,但至less是有效的。
Tumblr的OAuth的实现很奇怪,我会说。 我发现为什么它可以authentication和博客请求( 见这里 )。 据我所知,Tumblr与新的OAuth库( 这一个 )更好地合作。 我自己无用地花了一些时间试图使所有的旧OAuth的工作与ShareKit兼容。 我find的解决schemebuild议使用ASIFormDataRequest并使用OAuth身份validation信息( 最初在此处find )进行签名。 是的,它看起来像试图用草蛇杂交刺猬,但不知何故它适用于单一的图像。 但是,修改此代码后,我无法上传多个图像。 另一个解决scheme是“TumblrUploadr” ,但看起来有点太原始。
- 如何在使用Facebook iPhone SDK时刷新oauth标记
- 不再能够通过oauthlogin到iOS应用程序:“请求的页面未find”
- Tumblr OAuth图片文章给我401 /“无效的OAuth凭证”
- Google Plus SDK不刷新令牌(iOS)
- iOS Google Drive SDK使用关键“webContentLink”将文件加载到UIWebView中
- IOS linkedin集成(发送连接请求,search人员)
- 与parse-server和auth0的定制authentication集成
- 如何使用Google离线访问令牌在iOS的后台进行身份validation?
- Facebook的iOS SDK:login到Facebook,而不总是要求申请的权限