Curl

如何使用以 @ 開頭的 cURL 發佈內容?

  • June 28, 2019

命令

curl http://localhost/ --data @hello

將嘗試從文件中讀取hello。如何轉義@符號?

在不試圖了解更多關於 curl 內部的資訊的情況下,我建議直接進入它:

printf @hello | curl http://localhost/ --data @-

正如@ulrich-schwarz 在評論中建議的那樣, --data @<(echo @hello)如果更方便,您也可以使用(並非所有外殼都支持這種語法)。

查看 curl-7.41.0 的原始碼,我看不出有任何方法可以轉義@符號以防止解釋為文件名:

if('@' == is_file) {
 /* a '@' letter, it means that a file name or - (stdin) follows */

 if(curlx_strequal("-", p)) {
   file = stdin;
   set_binmode(stdin);
 }
 else {
   file = fopen(p, "rb");
   if(!file)
     warnf(config,
           "Couldn't read data from file \"%s\", this makes "
           "an empty POST.\n", nextarg);
 }

 /* ... */
}

所以,不幸的是,看起來我們被上面的管道解決方案卡住了。

引用自:https://unix.stackexchange.com/questions/193611