4

我对使用 node.js 的 LINUX 非常陌生。这只是我的第二天。我将node-curl用于 curl 请求。在下面的链接中,我找到了 Get 请求的示例。谁能给我一个使用 node-curl 的 Post 请求示例。

https://github.com/jiangmiao/node-curl/blob/master/examples/low-level.js

4

1 回答 1

5

您需要使用setopt才能为 cURL 请求指定 POST 选项。您应该首先考虑的选项是CURLOPT_POSTCURLOPT_POSTFIELDS。从链接自的libcurl 文档node-curl

CURLOPT_POST

设置为 1 的参数告诉库执行常规 HTTP 发布。这也将使库使用“Content-Type: application/x-www-form-urlencoded”标头。(这是迄今为止最常用的 POST 方法)。

使用 CURLOPT_POSTFIELDS 或 CURLOPT_COPYPOSTFIELDS 选项之一指定要发布的数据,使用 CURLOPT_POSTFIELDSIZE 或 CURLOPT_POSTFIELDSIZE_LARGE 设置数据大小。

或者,您可以使用 CURLOPT_READFUNCTION 和 CURLOPT_READDATA 选项向 POST 提供数据,但是您必须确保不要将 CURLOPT_POSTFIELDS 设置为除 NULL 之外的任何值。当通过回调提供数据时,您必须使用分块传输编码传输它,或者您必须使用 CURLOPT_POSTFIELDSIZE 或 CURLOPT_POSTFIELDSIZE_LARGE 选项设置数据的大小。要启用分块编码,您只需传入适当的 Transfer-Encoding 标头,请参阅 post-callback.c 示例。

CURLOPT_POSTFIELDS

... [this] 应该是在 HTTP POST 操作中发布的完整数据。您必须确保按照您希望服务器接收数据的方式格式化数据。libcurl 不会为您转换或编码它。大多数 Web 服务器将假定此数据是 url 编码的。

这个 POST 是一个普通的 application/x-www-form-urlencoded 类型(使用该选项时 libcurl 会默认设置该 Content-Type),这是 HTML 表单最常用的一种。另请参阅 CURLOPT_POST。使用 CURLOPT_POSTFIELDS 意味着 CURLOPT_POST。

如果要执行零字节 POST,则需要将 CURLOPT_POSTFIELDSIZE 显式设置为零,因为只需将 CURLOPT_POSTFIELDS 设置为 NULL 或 "" 就可以有效地禁用指定字符串的发送。libcurl 将改为假设您将使用读取回调发送 POST 数据!


有了这些信息,您应该能够将以下选项添加到低级示例以使其发出 POST 请求:

var fieldsStr = '{}';
curl.setopt('CURLOPT_POST', 1); // true?
curl.setopt('CURLOPT_POSTFIELDS', fieldsStr);

您将需要调整 的内容fieldsStr以匹配服务器期望的格式。根据文档,您可能还需要对数据进行 url 编码 - 这应该像encodeURIComponent根据这篇文章使用一样简单。

于 2013-03-20T14:07:26.340 回答