http - Rebol2 的读取/自定义文档?

标签 http twitter rebol2

我一直在尝试更新 Ross-Gill 的 Twitter API for REBOL2支持上传媒体。通过查看其来源、REBOL 食谱、codeconscious 站点和此处的其他问题,我的理解是 read/custom 是将数据POST 到网站的首选方式。

但是,我还没有找到关于read/custom 的任何真实文档。例如:是否支持发送multipart/form-data? (我已经设法通过手动组合每个部分来解决这个问题,但它似乎不适用于 Twitter 端的所有图像文件并且有点 hack)。 read/custom 是否仅在 HTTP/1.0 200 OK 响应中返回文本? (看起来是这样,当我收到 HTTP/1.0 202 Accepted 并需要读取结果数据时,这是有问题的)。如果不使用 to-string 转换数据,read/custom/binary 似乎无法正确发送二进制数据,这是有原因的吗?

TL;DR:在某处是否有关于 REBOL2 的 read/custom 的良好文档?或者,read/custom 是否仅适用于基本的 POST,我应该使用端口并手动处理 HTTP 响应?

最佳答案

您猜对了,read/custom 用于简单的 HTTP post,仅处理 Web 表单数据(这就是它在二进制数据上失败的原因)。没有官方文档。但这不是问题,因为您可以访问 HTTP 实现的源代码:

probe system/schemes/HTTP

在那里你可以看到/custom 细化支持两个关键字,postheader(用于设置自定义HTTP header )。看起来即使你同时使用这两个关键字,Content-Type 也将被强制为 application/x-www-form-urlencoded 无论如何(这可能是原因为什么你的二进制数据被服务器拒绝,因为提供的 MIME 类型是错误的)。

为了解决这个问题,您可以保存 HTTP 对象,修改其实现以满足您的需要并重新加载它。

保存:

save %http-scheme.r system/schemes/HTTP

重新加载:

system/schemes/HTTP: do load %http-scheme.r

如果您只是在 HTTP 代码中禁用硬编码的 Content-Type 设置,然后使用 header 关键字提供您自己的设置,它应该可以正常工作,甚至二进制数据:

read/custom <url> [header [Content-Type: <...>] post <data>]

希望这对您有所帮助。

关于http - Rebol2 的读取/自定义文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047417/

相关文章:

garbage-collection - 为什么 map-each 会保留引用要设置的单词的最后一个值?

REBOL 布局 : How to create layout words automatically - word has no context?

json - 如何防止用户代理显示无法识别的 MIME 类型的下载窗口?

android - Twitter Friendships/create 给出 403/Forbidden 错误消息

javascript - 使用 node.js 和 twitterAPI 获取最新推文列表

windows - 如何去掉rebol脚本安全级别提示

node.js - Redis 与 NodeJS - 创建一组十个项目

.net - HttpWebRequest - POST 中不允许使用括号

java - Spring中如何使用HttpRequestInterceptor?

java - 在java中获取twitter页面标题、描述和关键字