今天,用ruby写一段执行文件上传的post代码的时候,我写下如下代码:
require 'net/http'
require 'uri'
url = URI.parse('http://myserver/services/upload.xml')
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'username', 'password'
req['content-type'] = 'multipart/form-data;boundary=bbb'
......
req.body = %Q{--bbb
Content-Disposition: form-data; name="upload_file[]"; filename="my_file"
Content-Type: application/octet-stream
this is the content of the upload file.
this is the content of the upload file.
this is the content of the upload file.
--bbb
Content-Disposition: form-data; name="upload_file[]"; filename=""
Content-Type: application/octet-stream
--bbb--}
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
p res
不过这段代码始终执行错误,rails提示bad content之类。但是,我将header,body与w3g上的http关于multiple form的协议进行了比较,但是没发现有哪里不对。折腾了半天,只能调试跟踪到rails内部,发现rails在执行read_multipart方法,按照boundary截取request体的时候老是多截取一个字符。比如,对于body来说,我这里body的开始是--bbb,然后换行。但是在rails内部总是截取出--bbb C,多截取了一个C。纳闷了半天,突然想起,unix/linux下面的换行是:换行符(LF),不像windows下面换行是:回车(CR)换行(LF),但是http协议正好是按照boundary+CRLF进行request的解析,所以,造成我的request始终解析错误。所以,我将上面代码,关于body的赋值改为如下:
req.body = %Q{--bbb\015
Content-Disposition: form-data; name="upload_file[]"; filename="my_file"
Content-Type: application/octet-stream\015\012\015
this is the content of the upload file.
this is the content of the upload file.
this is the content of the upload file.
--bbb\015
Content-Disposition: form-data; name="upload_file[]"; filename=""
Content-Type: application/octet-stream\015\012\015
--bbb--}
OK!大功告成,可以通过脚本成功的发送文件上传post请求
参考:
http://www.w3.org/TR/html401/interact/forms.html#h-17.10
http://www.faqs.org/rfcs/rfc2388.html
http://www.faqs.org/rfcs/rfc1867.html
http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
2008.7.25 10:46 星期五
分享到:
相关推荐
在Linux环境中,SQL*Plus是Oracle数据库系统的命令行接口,用于执行SQL语句和PL/SQL块。然而,用户在使用SQL*Plus时可能会遇到一些输入问题,...熟悉并掌握这类工具的使用,对于提升Linux系统下的工作效能大有裨益。
### Linux下实现输入回显屏蔽及输入无需回车解析 #### 概述 在Linux环境中,经常需要开发一些特殊的应用程序或脚本,比如终端控制、游戏开发等,在这些场景中,我们可能需要对标准输入进行自定义处理,例如屏蔽...
在Linux下回车符是\n 最简单、最常用的解决方法是使用dos2unix命令转换:dos2unix filename Ubuntu下dos2unix和unix2dos命令在tofrodos包中 安装:apt-get install tofrodos 安装完之后用dos2unix和unix2dos发现...
windows下编写的linux脚本,回车字符在执行时会提示错误命令,可通过这两种方法处理
windows下和unix linux下按enter回车的区别 记事本打开文件显示黑方块的原因.zip
### vimz中设置回车换行缩进 在文本编辑器的世界里,Vim(Vi Improved)是一款功能强大且高效的文字编辑工具,尤其受到程序员和系统管理员的喜爱。它支持多种编程语言,并允许用户通过配置来定制编辑环境。本文将...
// 处理回车键被按下 // ... } else if (event->key() >= Qt::Key_A && event->key() ) { // 处理字母键被按下 // ... } // 其他键盘事件处理... } ``` 对于鼠标事件,QT使用QMouseEvent类。这个类包含了...
Linux 下安装 Eclipse Linux 是一个流行的开源操作系统,而 Eclipse 是一个功能强大的集成开发环境(IDE)。在 Linux 下安装 Eclipse,可以满足开发者的需求,提高开发效率。本文将详细阐述在 Linux 下安装 ...
Oracle 数据库用户锁定解决方案在 Linux 下的操作记录 Oracle 数据库用户锁定是指用户账户被锁定,无法登录数据库的情况。这种情况可能是由于用户密码输入错误次数超过限制,或者是数据库管理员对用户账户进行了...
Windows主要使用DOS/Windows风格的文本文件换行符(CRLF,即回车换行),而Linux则使用UNIX风格的换行符(LF,即只使用换行)。此外,Windows的压缩工具如WinRAR或7-Zip在处理文件时可能会包含特定的Windows元数据,...
在编 辑模式中,输入完数据后按下 ESC 键,然后输入 `:X` 参数,需要注意的是,这里是大写的 X,然后按回车键。这时会提示输入密码,然后确认密码,如图 1 所示。 方法二:视觉伪装加密 视觉伪装加密的优点是迷惑...
2. **候选词选择**:按数字键1-9选择候选词,或者使用上/下箭头移动光标,回车键确认选择。 3. **全角/半角切换**:`Shift+Space`用于切换全角和半角字符。 4. **中文/英文切换**:`Ctrl+空格`可快速在中文和英文...
4. 开始通信:点击“打开”按钮连接串口,然后就可以在发送区域输入数据并按下回车键发送,同时接收区会显示从串口接收到的数据。 5. 日志记录:HTerm通常会提供日志功能,如`changelog.txt`所示,你可以保存通信...
Linux下的串口助手,自己写的类通用信不好就改为使用的第三方类.可以发AT指令.代码注释也比较多. 1:串口打开格式一般为8N1(8位数据位,无校验位,1位的停止位)无流控制; 2:如果想让数据以16进制显示,请勾选HEX; 3:...
CommVault-Linux 客户端安装与卸载详细指南 CommVault 是一款数据保护和管理软件,能够对数据进行备份、恢复和存档。下面是 CommVault-Linux 客户端的安装与卸载详细指南: 安装 CommVault-Linux 客户端 1. 挂载...
例如,在 Linux 下,回车符对应的字符是 0x0d,而换行符对应的字符是 0x0a。在 Windows 平台下,情况也是如此。因此,在讨论回车符和换行符时,我们必须依据环境来讨论,否则就会出现混淆和误解。 在 arm-linux C ...
例如,一个在Windows系统上创建的文本文件,如果直接在Linux环境下打开,可能会看到每行结尾多出一个不可见的字符,即回车符。同样,一个在Linux上创建的文本文件,在Windows下打开时,可能无法正确识别每一行的结尾...
Linux 下 C 语言使用、编译与调试 Linux 是一个开源的操作系统,广泛应用于服务器、嵌入式系统和个人电脑等领域。作为一个程序员,熟悉 Linux 下的 C 语言开发环境是非常重要的。本资源将引导读者学习如何使用 vi ...
Linux 下克隆工具-Mondo Mondo 是一个广泛使用的 Linux 系统备份工具,也可以说是 Linux 下的 Ghost。它支持 LVM,RAID,ext2, ext3, JFS, XFS, ReiserFS, VFAT 等多种文件系统,可以把需要备份的文件创建成 ISO ...