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