【问题标题】:Curl-convert to a simple http request?卷曲转换为简单的 http 请求?
【发布时间】:2015-02-04 10:22:48
【问题描述】:

我有一些curl 请求,我想从中构建一个基本的POST 请求认证(带有标头等),我找不到任何转换它的工具:

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/xxxxxxxxxxxxx/Calls.json' \
--data-urlencode 'To=xxxxxxx65542'  \
--data-urlencode 'From=+xxxxxxx4215'  \
-d 'Url=https://api.twilio.com/2010-04-01'  \
-d 'Method=GET'  \
-d 'FallbackMethod=GET'  \
-d 'StatusCallbackMethod=GET'  \
-d 'Record=false' \
-u ACbe68cddxxxxxxxxxxxx3aba243cc4cdb:0f442xxxxxxxxxxxxxxxxxxx

那么我的 POST 请求应该是什么样子的呢?

【问题讨论】:

  • 你能澄清一下你想把上面的 curl 请求转换成什么吗?不太清楚。
  • 我有一些 api ,它显示了一个 curl 代码来做某事。比,我有一些硬件设备,应该发送一个 POST 请求,但它没有运行 curl,所以我必须使用那个 curl 代码,并从中制作一个完整的基本 POST 请求,例如我可以在这个站点中运行: hurl.it 。那么我将如何获取这个 curl 代码,并从中创建正确的字段以使用该网站发送请求?
  • 所以你有一个不能运行 curl 的硬件设备,你想从中发出 HTTP 请求?我有这个权利吗?硬件设备运行什么平台或编程语言?
  • @DevinRader 是的。它运行 lua ..
  • Lua 本身没有网络 IO,所以你必须使用外部库。那你用哪一个?也许你可以只使用 curl 绑定?

标签: http post curl lua


【解决方案1】:

好的,所以我试图弄清楚如何从 ESP8266 nodeMcu v0.9 模块发送短信。它能够像使用 arduino ide 1.6.4 的 arduino 一样工作。

无论如何,我找到了http://textbelt.com,它只显示了一种简单的 CURL 方式发送短信。

这是它希望你发送的 CURL 消息

$ curl -X POST http://textbelt.com/text \ -d number=5551234567 \ -d "message=I sent this message for free with textbelt.com"

因此,为了转换为普通的 HTTP POST 命令,我执行了以下操作。 (这在 Arduino IDE 中有效) number 和 message 是 String 对象。

String messageToSend = "number="+number+"&message="+message;

client.print("POST /text HTTP/1.1\r\n");
client.print("Host: textbelt.com\r\n");
client.print("Content-Type: application/x-www-form-urlencoded\r\n");
client.print("Content-Length: ");
client.print(messageToSend.length());
client.print("\r\n\r\n");
client.print(messageToSend);

起初我尝试不使用 Content-Type,但这似乎不起作用。所以我必须添加我发送的内容类型。

如果您要使用 WireShark 监控网络流量,您会看到

POST /text HTTP/1.1\r\n
Host: textbelt.com\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 48\r\n
\r\n
number=5551234567&message=this is a text message

我可能已经能够使用 text/plain 作为内容类型的较少文本,但我认为它可能需要应用程序 urlencoded 类型才能工作。

希望这有助于尝试将 curl 转换为 http 的其他人。

【讨论】:

    【解决方案2】:

    来自 cURL 手册页:

    -H, --header (HTTP) 获取网页时使用的额外标头。您可以指定任意数量的额外标头。请注意,如果您 应该添加一个与其中一个同名的自定义标题 内部的 curl 将使用,您的外部设置的标题将是 使用而不是内部的。这使您可以使 比 curl 通常做的更棘手的事情。你不应该更换 内部设置标题,但完全不知道你是什么 正在做。通过在没有替换的情况下删除内部标题 冒号右边的内容,如:-H "Host:"。如果你发送 没有值的自定义标头,则必须终止其标头 带分号,例如 -H "X-Custom-Header;"发送 "X-Custom-Header:".

    curl 将确保您添加/替换的每个标头都与 适当的行尾标记,因此您不应将其添加为 标题内容:不要添加换行符或回车,它们会 只会为你搞砸。

    另请参阅 -A、--user-agent 和 -e、--referer 选项。

    此选项可以多次使用以添加/替换/删除多个 标题。

    Amazon AWS 大量使用标头进行身份验证。一个快速的谷歌应该会导致很多例子,比如来自http://tmont.com/blargh/2014/1/uploading-to-s3-in-bash的这个例子:

      curl -X PUT -T "${file}" \
      -H "Host: ${bucket}.s3.amazonaws.com" \
      -H "Date: ${dateValue}" \
      -H "Content-Type: ${contentType}" \
      -H "Authorization: AWS ${s3Key}:${signature}" \
      https://${bucket}.s3.amazonaws.com/${file}
    

    您需要做的就是调整 AWS 示例以供您使用 twilio。

    要将示例变为 POST,只需将 PUT 更改为 POST 并添加您的 POST 字段-d "field1=val1&field2=val2&field3=val3"

    【讨论】:

    • 我不确定您的答案的底线是什么。我的请求到底有多相似??
    • @Curnelious 请澄清您的问题。如果我的回答不正确,那么显然我不确定您要问什么?
    【解决方案3】:

    您可以使用--header 指定标头,并使用-X / --request 参数指定请求类型(POST)。

    例子:

    curl --request POST --header "X-MyHeader: MyAuthenticatedHeader" www.stackoverflow.com
    

    在你的情况下应该是:

    curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/xxxxxxxxxxxxx/Calls.json' \
    --header 'X-MyHeader: MyAuthenticatedHeader' \
    --data-urlencode 'To=xxxxxxx65542'  \
    --data-urlencode 'From=+xxxxxxx4215'  \
    -d 'Url=https://api.twilio.com/2010-04-01'  \
    -d 'Method=GET'  \
    -d 'FallbackMethod=GET'  \
    -d 'StatusCallbackMethod=GET'  \
    -d 'Record=false' \
    -u ACbe68cddxxxxxxxxxxxx3aba243cc4cdb:0f442xxxxxxxxxxxxxxxxxxx
    

    【讨论】:

    • 你刚刚又给我看了同样的东西,我从你的回答中不明白我的帖子请求到底应该是什么样子?
    • 上面的 curl 代码正是你想要的。 -X POST 用于发出 post 请求,而 --header 'yourheaders' 用于发送标头。您在寻找 PHP 代码吗?还是您只是使用命令行 curl。如果您使用的是命令行,那么以上内容就足够了。如果您在 PHP 或 ASP.net 应用程序中使用它,那么您应该更改您的问题。
    • 我有一些 api ,它显示了一个 curl 代码来做某事。比,我有一些硬件设备,应该发送一个 POST 请求,但它没有运行 curl,所以我必须获取那个 curl 代码,并从中生成一个完整的 POST 请求,例如我可以在这个站点中运行:@ 987654321@。那么我将如何获取这个 curl 代码,并从中创建正确的字段以使用该网站发送请求?
    • 下次请明确具体情况。您的问题没有提及 lua 以及您的情况的所有复杂性。现在您将使用哪种编程语言?如果您还打算使用 lua,那么该硬件必须有一个 API 可以使用,您必须使用该 API 来获取该 POST 请求,然后使用诸如“LuaCURL”之类的 curl 库,而不是使用 hurl.it 运行请求。现在不要询问如何与该 API 交互,请查看它的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2011-08-10
    • 2012-04-04
    • 2016-12-06
    • 2016-12-20
    • 2018-09-20
    • 2019-01-27
    相关资源
    最近更新 更多