卷曲转换为简单的http请求?

时间:2015-02-04 10:22:49

标签: http post curl lua

我有一些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请求应该如何?

3 个答案:

答案 0 :(得分:2)

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

无论如何,我找到了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);

起初我尝试过没有内容类型,但似乎没有效果。所以我不得不添加我发送的内容类型。

如果您使用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。

答案 1 :(得分:-1)

来自cURL手册页:

  

-H, - head(HTTP)获取网页时使用的额外标头。您可以指定任意数量的额外标头。请注意,如果你   应该添加一个与其中一个名称相同的自定义标头   内部卷曲会使用,你的外部设置标题将是   用来代替内部的。这可以让你做得更好   比卷曲更棘手的东西通常会做。你不应该替换   内部设置标题而不完全清楚你是什么   这样做。在没有替换的情况下删除内部标题   冒号右侧的内容,如:-H“Host:”。如果你发送   如果自定义标头没有值,则必须终止其标头   用分号,例如-H“X-Custom-Header;”发送   “X-定制标题:”

     

curl将确保您添加/替换的每个标头都随之发送   正确的行尾标记,因此你不应该将其作为一部分添加   标题内容:不添加换行符或回车符,它们会   只为你搞砸了。

     

另请参阅-A, - user-agent和-e, - feedback选项。

     

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

亚马逊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}

您需要做的就是根据您的twilio使用AWS示例。

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

答案 2 :(得分:-1)

您可以使用--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