ios - 使用适用于 iOS 的 OAuthConsumer 将图像上传到 tumblr

标签 ios http oauth tumblr

我正在使用 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。而不是使用 linked on Google Code 的版本, 你应该使用更新的版本 from 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 应该处理的方式,但至少它起作用了。

关于ios - 使用适用于 iOS 的 OAuthConsumer 将图像上传到 tumblr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10212975/

相关文章:

数据重新加载时,iOS Collection View 向上移动

php - 在 OS X 上的 PHP 5 上安装 OAuth PECL 包

java - Spring OAuth oauth/token 在 tomcat 上返回 404 war

php - 如何在保存提示期间不向浏览器发送所有文件数据?

java - 具有NTLM身份验证的Spring WebClient

http - IIS 文件下载挂起/超时 - sc-win32-status = 64

api - 你如何使用 CURL 访问使用 Github OAuth 的 jenkins api

ios - SearchController 问题,搜索时 displayController 显示与 Searchbar 的间距

iphone - 意外的 UITableViewSeparatorView 版本导致应用程序启动时崩溃

iphone - 为什么我的对象没有被添加到数组中?