本文针对版本:Node.js 0.12.4
发送POST请求,相比GET会有些蛋疼,因为Node.js(目前0.12.4)现在还没有直接发送POST请求的封装。发送GET的话,使用<code>http.get</code>可以直接传一个字符串作为URL,而<code>http.get</code>方法就是封装原始的<code>http.request</code>方法。发送POST的话,只能使用原始的<code>http.request</code>方法,同时因为要设置HTTP请求头的参数,所以必须传入一个对象作为<code>http.request</code>的第一个<code>options</code>参数(而不是URL字符串)。另外,<code>options</code>参数中的<code>hostname</code>需要的是不带协议的URL根路径,子路径需要在<code>path</code>属性单独设置。如果<code>hostname</code>包含了完整的URL,通常会遇到错误:Error: getaddrinfo ENOTFOUND http://www.xxx.com/xxx。
这里可以使用<code>url</code> Module进行协助,使用<code>url.parse</code>返回值的<code>hostname</code>和<code>path</code>属性就可以,测试代码:
输出:
OK,<code>hostname</code>和<code>path</code>参数解决后,然后就是常见POST请求HTTP Header属性的设置,设置<code>method</code>为<code>POST</code>,另外如果是模拟HTML <code><form></code>的POST请求的话,<code>Content-Type</code>应当是<code>application/x-www-form-urlencoded</code>,最后别忘了<code>Content-Length</code>,而且,如果Content是字符串的话最好用<code>Buffer.byteLength('字符串', 'utf8')</code>来获取字节长度(而不是直接<code>'字符串'.length</code>,虽然使用URL编码的ASCII字符串每个字符是1字节)。
运行完毕后,会以字符串输出HTTP回应内容。