我有一个程序,接受HTTP POST文件并将所有POST结果写入文件,我想编写一个脚本来删除HTTP header ,只保留二进制文件数据,该怎么做?
文件内容如下(Content-Type: application/octet-stream
和 ------------KM7cH2GI3cH2Ef1Ij5gL6GI3Ij5GI3
之间的数据为我想要什么:
POST /?user_name=vvvvvvvv&size=837&file_name=logo.gif& HTTP/1.1^M
Accept: text/*^M
Content-Type: multipart/form-data; boundary=----------KM7cH2GI3cH2Ef1Ij5gL6GI3Ij5GI3^M
User-Agent: Shockwave Flash^M
Host: 192.168.0.198:9998^M
Content-Length: 1251^M
Connection: Keep-Alive^M
Cache-Control: no-cache^M
Cookie: cb_fullname=ddddddd; cb_user_name=cdc^M
^M
------------KM7cH2GI3cH2Ef1Ij5gL6GI3Ij5GI3^M
Content-Disposition: form-data; name="Filename"^M
^M
logo.gif^M
------------KM7cH2GI3cH2Ef1Ij5gL6GI3Ij5GI3^M
Content-Disposition: form-data; name="Filedata"; filename="logo.gif"^M
Content-Type: application/octet-stream^M
^M
GIF89an^@I^^M
------------KM7cH2GI3cH2Ef1Ij5gL6GI3Ij5GI3^M
Content-Disposition: form-data; name="Upload"^M
^M
Submit Query^M
------------KM7cH2GI3cH2Ef1Ij5gL6GI3Ij5GI3-
最佳答案
您想在文件结束时执行此操作,还是在文件结束后执行此操作?
几乎任何脚本语言都应该可以工作。我的 AWK 有点生疏,但是...
awk '/^Content-Type: application\/octet-stream/,/^--------/'
这应该打印 application/octet-stream
和 ---------
行之间的所有内容。它还可能包含这两行,这意味着您必须做一些更复杂的事情:
BEGIN {state = 0}
{
if ($0 ~ /^------------/) {
state = 0;
}
if (state == 1) {
print $0
}
if ($0 ~ /^Content-Type: application\/octet-stream/) {
state = 1;
}
}
application\/octet-stream
行位于 print 语句之后,因为您希望在看到 后将
。state
设置为 1
>应用程序/八位字节流
当然,作为 Unix,您可以通过 awk 通过管道输出程序的输出,然后保存文件。
关于linux - 如何在 Linux 中从 HTTP MIME 编码消息中提取文件数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4236020/