【问题标题】:Add newlines to each line in http response在 http 响应中的每一行添加换行符
【发布时间】:2017-04-17 08:27:34
【问题描述】:

我正在创建一个 API(使用 AWS API Gateway),它从数据库中获取值并将它们输出到 HTTP 响应中。

这样做的目的是允许用户创建包含http响应中数据的配置文件,即

curl http://api/get/data > config.conf

配置文件中的每个值都需要换行,即

var1=x
var2=y
var3=z

在我的 API 中,我将响应中的 Content-Type 设置为“text/plain”,并在输出的每一行添加了一个“\r\n”。

但是,当我使用 cURL 发出请求时,我得到:

var1=x\r\nvar2=y\r\nvar3=z\r\n

都在同一行。我的 shell (bash) 没有将 "\r\n" 解释为换行符。

任何人都可以建议重新。正确的方法来做到这一点?

我应该使用“text/plain”吗?我需要告诉 cURL 期待这些字符吗?

【问题讨论】:

  • 完全没有,刚刚测试过这个工作正常,这意味着你的实现有问题。由于您使用的是 \r\n 我假设您正在运行一些描述的窗口?
  • 我能做的第一件事就是清理您的内容并改为发送 \\r\\n。打开 chrome,开发工具,发出请求并检查网络请求,确保在“响应”选项卡中您准确地获得了每一行的每个值。如果您在响应中被转义 \r\n ,您会在您描述的一行中看到它们,这意味着我是正确的。

标签: bash http curl aws-api-gateway


【解决方案1】:

感谢您的建议。原来这是 AWS API Gateway 中集成方法映射的问题,与我的内容格式无关。

我正在使用:

$input.body

在集成方法映射中。当我将其更改为:

$input.path('$')

效果很好。我只是开始了解 AWS API Gateway,所以我不确定这是为什么。据我所知,我的内容是作为 JSON 内容返回的,但我不完全确定是否是这种情况。

【讨论】:

  • 不同之处在于 $input.path('$') 将输出输入的对象符号表示。 $input.body 应该给你原始输入。不确定后端和响应在哪里发挥作用,但这就是两者之间的区别。
  • 即对于输入 { "foo":"bar" } ---- $input.body -> { "foo":"bar" } ----- $input.path('$') -> {foo=bar }
【解决方案2】:

这个方法应该可以正常工作。如果您在输出中看到“\r\n”,则表示您添加了转义字符。您是如何将“\r\n”作为输出的一部分的?

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2018-09-17
    • 2014-03-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多