【发布时间】:2013-03-09 15:16:39
【问题描述】:
我对使用 node.js 的 LINUX 非常陌生。这只是我的第二天。我使用 node-curl 进行 curl 请求。在下面的链接中,我找到了 Get 请求的示例。谁能给我一个使用 node-curl 的 Post 请求示例。
https://github.com/jiangmiao/node-curl/blob/master/examples/low-level.js
【问题讨论】:
我对使用 node.js 的 LINUX 非常陌生。这只是我的第二天。我使用 node-curl 进行 curl 请求。在下面的链接中,我找到了 Get 请求的示例。谁能给我一个使用 node-curl 的 Post 请求示例。
https://github.com/jiangmiao/node-curl/blob/master/examples/low-level.js
【问题讨论】:
您需要使用setopt 来为 cURL 请求指定 POST 选项。您应该首先查看的选项是CURLOPT_POST 和CURLOPT_POSTFIELDS。来自libcurl documentation 链接自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 不会为您转换或编码它。大多数网络服务器会假设这些数据是 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 编码 - 根据 this post,这应该像使用 encodeURIComponent 一样简单。
【讨论】: