代码之家  ›  专栏  ›  技术社区  ›  deamon

如何用卷曲发送换行符?

  •  77
  • deamon  · 技术社区  · 16 年前

    我试过用curl发送一个换行符,但是 \n 不是由旋度解释的。

    curl -X PUT -d "my message\n" http://localhost:8000/hello
    

    我怎样才能用卷曲发送换行符?

    9 回复  |  直到 16 年前
        1
  •  107
  •   oleksii    10 年前

    有时您希望提供要逐字发送的数据。

    这个 --data-binary

        2
  •  42
  •   Benjamin Atkin    8 年前

    你的壳在流逝 \ n 而不是一条折线 "my message\n" . Bash支持另一种支持转义序列的字符串语法,如 \n 和 \t $' 然后用 ' :

    curl -X PUT -d $'my message\n' http://localhost:8000/hello
    

    见 ANSI-C Quoting 在 Bash Reference Manual

        3
  •  15
  •   Jammer    12 年前

    对于不想使用文件并且不想使用shell转义魔法的人来说,解决方案是:

    curl -X POST --data-binary @- http://url.com <<EOF
    line one
    line two
    EOF
    

    但这是post数据有效负载中的文字换行,而不是表单字段中的文字换行。

        4
  •  14
  •   Dave Kerr    10 年前

    有一个更简单的方法!

    curl -X PUT -d $'my message\n' http://localhost:8000/hello
    

    ANSI-C Quoting 插入换行符。

    没有管道,没有数据文件。另见 Sending Newlines with cURL .

        5
  •  6
  •   Tim Mickey    10 年前

    (我在这里提出了一个稍微不同的问题,所以我只想发布我的答案,因为这可能有助于未来的探险家)

    我的解决方案适用于发送表单样式数据的人,即查询字符串中的键/值对。使用编码的换行符,即 %0A %20 . 你可以用 http://meyerweb.com/eric/tools/dencoder/

    所以如果你想设置 message 到值:

    line one
    another
    

    你会派

    curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
    
        6
  •  6
  •   kboul    7 年前

    有类似的问题。将csv文件从Mac上传到云存储时,正在删除新行。下载后,整个文件看起来像一行。我尝试添加不同的下线字符'\n'''\r''\r\n',但没有成功。使用“--data binary”而不是“-d”解决了这个问题。 顺便说一下,这个问题只发生在Mac上-d在CentOS机器上打电话时工作得很好。这很像是因为Mac的换行符。但不想再调试了。

    curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"
    

    对

    curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
    
        7
  •  3
  •   Pekka    16 年前

    curl -X PUT -d @message.txt http://localhost:8000/hello
    

    从 manual

    如果数据以字母@开头,其余的应该是要从中读取数据的文件名,或者-如果希望curl从stdin中读取数据。文件的内容必须已经是URL编码的。也可以指定多个文件。因此,从名为“foobar”的文件中发布数据将使用--data@foobar完成。

        8
  •  3
  •   C B    11 年前

    curl -d "line1
    line2" http-echo.com
    
    Server gets this: line1\nline2
    

    执行此操作以删除换行符:

    curl -d "line1 \
    line2" http-echo.com
    
    Server gets this: line1 line2
    
        9
  •  -2
  •   PJ Brunet Dan Fego    8 年前

    我使用的是Sendgrid,最初在这里找到的代码(复制如下) https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html

    \n\n \n 被忽略。我试着加倍逃跑和其他建议。我也试过了 \r\n 这在Gmail中也不起作用。注意:我没有费心去测试其他的电子邮件客户端,也许这是Gmail特有的问题。

        curl --request POST \
      --url https://api.sendgrid.com/v3/mail/send \
      --header 'Authorization: Bearer YOUR_API_KEY' \
      --header 'Content-Type: application/json' \
      --data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
    

    最后,我放弃了寻找解决方案,转而 text/plain 到 text/html <br /> 标签。

    有人建议,如果启用了跟踪像素,Sendgrid会将纯文本转换为HTML,这是有意义的。也许换行符在明文到html的转换过程中被破坏了。我想客户端需要一个跟踪像素,所以决定切换到HTML。