将Curl转换为简单的HTTP请求?

我有一些 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 请求应该长什么样?

点赞
用户4474629
用户4474629

从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”

2015-02-04 10:35:41
用户4528104
用户4528104

你可以用 --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
2015-02-04 10:59:00
用户4954924
用户4954924

好的,我正在尝试从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中有效) 号码和消息都是字符串对象。

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的其他人有所帮助。

2015-05-29 22:31:51