使用 iOS 版 OAuthConsumer 将图像上传到 tumblr

2024-03-16

我正在使用OAuth消费者 http://code.google.com/p/oauthconsumer/在我的 iOS 应用程序中,它使用汤不热API http://www.tumblr.com/docs/en/api/v2#posting。一般来说,进行 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。而不是使用以下版本链接到 Google 代码 http://code.google.com/p/oauthconsumer/,您应该使用更新的版本来自 github https://github.com/jdg/oauthconsumer因为它包括发送包含多个字符串的多部分表单的方法。

现在,如果我没有完全错的话,理论上你现在应该做的是:

//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_...-variables,将所有其他变量放入多部分形式中。事情应该是这样的,根据文档,你应该没问题。不幸的是,你不是,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 应该处理此问题的方式,但至少它起作用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 iOS 版 OAuthConsumer 将图像上传到 tumblr 的相关文章

随机推荐

  • 在 CDT 项目中使用不同的 C++ 编译器的正确方法是什么?

    我在 Linux 上使用 Eclipse CDT Mars 2 和 Neon RC 我的发行版的默认 C 编译器是 GCC 5 3 1 但对于我的一些工作 我使用 GCC 4 9 3 我想一切关于我使用 GCC 4 9 3 的项目 工具发现
  • 使用自定义封送拆收器时的 C# Marshal.Sizeof()

    是否可以使用Marshal SizeOf 在使用自定义封送拆收器的结构上 例如 struct Abcde public int test1 MarshalAs UnmanagedType CustomMarshaler MarshalTyp
  • 自定义类上的 List. except

    假设我有一个自定义类 public class WineCellar public string year public string wine public double nrbottles 假设我现在有这个自定义类的列表 List
  • 这些为单例创建静态实例的方法有什么区别?

    我最近遇到了一个错误 该错误仅在将库构建为发布版本而不是调试版本时才会显现出来 该库是一个带有 COM 包装器的 NET dll 我正在使用 CoCreateInstance 在非托管 C 应用程序中从 dll 创建一个类 当我最终找到该错
  • 在Python中,给定一个函数名,如何获取包含该函数的所有模块?

    例如 有os path walk os walk并假设另一个md walk 并假设os是进口的但是md不是 我想要一个像 whereis walk 虽然可以返回os path walk os walk and md walk 或者如果很难知
  • IE9 + IE10 中文本输入的文本垂直居中

    这里的例子 http jsfiddle net D7v2Y http jsfiddle net D7v2Y 在 firefox webkit 中这效果很好 文本居中 不适用于 IE10 或 IE9 input display block b
  • 遍历 Linq 表达式以设置属性字段的值

    这是一个非常复杂的问题 尽管看起来很简单 我想我必须遍历整个表达式树 除非有人知道更好的方法 假设我有一个用户对象 class User public UserAccount Account get set class UserAccoun
  • Data Mapper 是比 Active Record 更现代的趋势吗

    我遇到过几个 ORM 它们最近宣布计划将其实现从 Active Record 迁移到 Data Mapper 我对这个主题的了解非常有限 那么对于那些更了解的人来说一个问题是 Data Mapper 比 Active Record 更新吗
  • 使用 Jekyll 的 Github 页面推送网站后出现空白页面

    我使用 Jekyll 创建了一个 GitHub Pages 网站 浏览时一切正常http 本地主机 4000 http localhost 4000 然后我push到github上 但是访问的时候什么也没有 空白页 没有错误 没有内容 ht
  • 如何检测在asp.net (mvc) 中单击了哪个提交按钮

    我已经阅读了大量使用提交类型输入值的答案 但我的输入按钮集合需要全部具有相同的文本 其他人使用 Javascript 我也试图避免这种情况
  • CreateView 中的 DatepickerWidget

    在我的模型中 我有一个日期字段 所以我想使用日期选择器 如何使用 Django Admin 日期选择器 我找到了在表单中执行此操作的示例 但我只设计了一个模型 是否可以在我的模型中定义这个小部件 您可以使用get form覆盖小部件属性的方
  • Twilio javascript 客户端回调呼叫应答

    我正在使用 Twilio JavaScript 客户端 我能够拨打电话 捕获回调事件 连接和断开连接 如何实现接听电话时的回调 我需要在接听电话后显示通话计时器 Twilio js 客户端有一个 Device 属性 其中包含您可以使用的以下
  • 如何运行 git log 以仅查看特定分支的更改?

    我有一个本地分支跟踪远程 主分支 运行后git pull and git log 日志将显示远程跟踪分支以及当前分支中的所有提交 但是 由于对远程分支进行了如此多的更改 因此我只需要查看对当前本地分支所做的提交 用于仅显示特定分支的提交的
  • 特金特;新班级中的顶级

    我正在使用 Python 和 Tkinter 开发一个项目 我想将其模块化 主要问题之一是我的实施Toplevel小部件太大 我听说可以将此小部件放入一个新类中 问题是我不知道怎么办 这是我定义主窗口的方式 class App tk Tk
  • 如何处理第三方库代码中的 exit() 调用?

    我正在开发一个 C 应用程序 该应用程序使用另一个团队用 C 编写的库 图书馆的作者喜欢打电话exit 当发生错误时 立即结束程序 而不调用 C 应用程序中堆栈上对象的析构函数 应用程序设置了一些系统资源 这些资源在进程结束后不会自动被操作
  • 发送 TCP 请求并获得响应

    我尝试使用 TCP 请求发送一些字符串 我的服务器 ID 和端口是正确的 我搜索 TCP 请求并找到了一些示例或教程 这是我的来源 public class TcpClient public static final String SERV
  • postgres复制命令,二进制文件

    我正在使用 COPY 将字段从表复制到文件 该字段是一个压缩文本文件 因此我使用二进制副本 文件已创建 唯一的问题是 COPY 向文件添加了标头和尾部 这是我不需要的 这可以改变吗 是否有一个参数可以使 COPY 将字段与数据库中的字段完全
  • 如何在 Angular CLI 中更新 Angular 2

    如何更新 Angular 2 版本 我使用 Angular CLI 1 0 0 beta 20 4 并尝试了 npm update save 但它没有执行任何操作 下面是我目前的 package json 文件 感谢对此的任何帮助 name
  • 如何在黑莓手机中制作状态栏?

    我想在屏幕底部设置状态栏 它应该在左侧和右侧显示一个按钮 你可以在下面看到我的屏幕 我的代码是这样的 private void BottomLayout Bitmap topBg Bitmap getBitmapResource Image
  • 使用 iOS 版 OAuthConsumer 将图像上传到 tumblr

    我正在使用OAuth消费者 http code google com p oauthconsumer 在我的 iOS 应用程序中 它使用汤不热API http www tumblr com docs en api v2 posting 一般