Bash curl POST一个二进制变量

时间:2013-01-06 20:42:37

标签: bash variables curl encoding binary

如何在curl bash中发布二进制变量?

#!/usr/bin/env bash
IMAGE=$(curl "http://www.google.com/images/srpr/logo3w.png")
curl --data-binary "$IMAGE" --request "POST" "http://www.somesite.com"

Curl似乎在上传时会破坏图片。

Curl可以选择将响应写入磁盘,然后从中读取,但只在内存中执行它会更有效。

2 个答案:

答案 0 :(得分:2)

尝试消除变量......如下:

curl "http://www.google.com/images/srpr/logo3w.png" | curl --data-binary - --request "POST" "http://www.somesite.com"

来自curl手册页:

  

如果使用字母@开始数据,则其余部分应该是用于读取数据的文件名,或者 - 如果您希望curl从stdin读取数据。

编辑:也可以在手册页中找到:

  

- raw使用时,它禁用内容的所有内部HTTP解码或传输编码,而是使它们以未更改的原始方式传递。 (在7.16.2中添加)

如果在任何一方或双方都适用,会发生什么?

答案 1 :(得分:1)

我遇到了一个相关的问题,我想从给定的文件夹中动态卷曲文件。

curl --data-binary directory/$file --request "POST" "http://www.somesite.com" 不起作用 - 上传字符串“directory / myFile.jar”而不是实际文件。

添加@符号 curl --data-binary @directory/$file --request "POST" "http://www.somesite.com"修正了它。