如何使用CURL对JSON POST请求中的部分字符进行转义



因此,我正在尝试使用一种名为Postmark的服务来发送格式化的HTML电子邮件。这里有一些API文档,他们给出了如何使用CURL:的示例

$: curl -X POST "http://api.postmarkapp.com/email" 
-H "Accept: application/json" 
-H "Content-Type: application/json" 
-H "X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d" 
-v 
-d "{From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

所以,这一切都很好,当我使用自己的代币时,效果也很好。问题是当我添加自己的HtmlBody时。如果我发送一个简单的消息,它就可以正常工作。只要我添加某些特殊字符,它就会断开。例如,如果我做这样的事情:

-d "{From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<!DOCTYPE html><html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

它因!而断开。我该怎么解决这个问题?


UPDATE:正如sourcejedi所指出的,我正在从shell(bash)运行此程序,因此!问题现在对我来说是有意义的。我将JSON字符串移动到一个名为email.JSON的单独文件中,并使用-d @email.json加载该文件。这适用于一封带有<!DOCTYPE>的简单电子邮件,但当我尝试加载完整的HTML:时,仍然会出现以下错误

{"ErrorCode":402,"Message":"Received invalid JSON input."}

我相信这与其他一些特殊的角色有关。当我使用--data-urlencode @email.json时,我也会遇到同样的错误。

您需要使用--data-urlencode,所以它应该像curl -X POST --data-urlencode

当我在我的一端测试时。。

* About to connect() to api.postmarkapp.com port 80 (#0)
*   Trying 50.56.54.211... connected
> POST /email HTTP/1.1
> User-Agent: curl/7.23.1 (x86_64-pc-win32) libcurl/7.23.1 OpenSSL/0.9.8r zlib/1
.2.5
> Host: api.postmarkapp.com
> Accept: application/json
> Content-Type: application/json
> X-Postmark-Server-Token: ed742D75-5a45-49b6-a0a1-5b9ec3dc9e5d
> Content-Length: 164

还似乎打断了我一个刚回:-砰:!DOCTYPE:未找到事件

这是bash shell的一个错误。你需要逃离!as \!你自己但我认为你最好从文件中阅读。使用-d @datafile代替-d data。(或从stdin读取-d @-)。

我曾经在发布JSON数据时收到过同样的错误。我所做的是用一个单引号将数据括起来,并使用双引号作为字符串:

因此来自:

-d "{From: 'sender@example.com', To: 'receiver@example.com', Subject: 'Postmark test', HtmlBody: '<html><body><strong>Hello</strong> dear Postmark user.</body></html>'}"

用途:

-d '{From: "sender@example.com", To: "receiver@example.com", Subject: "Postmark test", HtmlBody: "<html><body><strong>Hello</strong> dear Postmark user.</body></html>"}'

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新