1. 程式人生 > >Nodejs 傳送HTTP POST請求例項

Nodejs 傳送HTTP POST請求例項

專案裡面需要用到使用NodeJs來轉發HTTP POST請求,研究了很久最後才弄通,把過程記錄一下:

接收端程式碼很簡單,就是回送body.address屬性:

exports.sendEmail = function (req, res) {
    res.send(200, req.body.address);
}

之所以能夠訪問body的address屬性,這得益於express.js(connect)的bodyparser中介軟體。該中介軟體解析request的body,假如其content type滿足某些條件的話,就嘗試將其轉換成javascript物件。某些條件是指:multipart, urlencoded, json。

好了,接下來看轉發端的程式碼,為了簡單起見,我直接將hard-coding的資料進行轉發:

exports.sendEmail = function (req, res) {

    var data = {
        address: '[email protected]',
        subject: "test"
    };

    data = require('querystring').stringify(data);
    console.log(data);
    var opt = {
        method: "POST",
        host: "localhost",
        port: 8080,
        path: "/v1/sendEmail",
        headers: {
            "Content-Type": 'application/x-www-form-urlencoded',
            "Content-Length": data.length
        }
    };

    var req = http.request(opt, function (serverFeedback) {
        if (serverFeedback.statusCode == 200) {
            var body = "";
            serverFeedback.on('data', function (data) { body += data; })
                          .on('end', function () { res.send(200, body); });
        }
        else {
            res.send(500, "error");
        }
    });
    req.write(data + "\n");
    req.end();
}

這裡瀏覽器回顯的就是"[email protected]",注意,我把content type設定成x-www-form-urlencoded,這是bodyparser所支援的了型別之一,而body的格式通過require('querystring').stringify(...)來格式化的,這個會將物件轉換成諸如"address=test%40test.com&subject=test"這種格式的字串。

再來看另外一種content type,JSON:

exports.sendEmail = function (req, res) {

    var data = {
        address: '
[email protected]
', subject: "test" }; data = JSON.stringify(data); console.log(data); var opt = { method: "POST", host: "localhost", port: 8080, path: "/v1/sendEmail", headers: { "Content-Type": 'application/json', "Content-Length": data.length } }; var req = http.request(opt, function (serverFeedback) { if (serverFeedback.statusCode == 200) { var body = ""; serverFeedback.on('data', function (data) { body += data; }) .on('end', function () { res.send(200, body); }); } else { res.send(500, "error"); } }); req.write(data + "\n"); req.end(); }

這同樣能成功,但是有2個修改,一個是我用JSON.stringify()來格式化body內容,另一個是我把content type變成了json格式,當然,這個也是body parser所支援的格式之一!

另外,有兩個地方,我不是很清楚,一個是貌似content-length不是必須的,另一個是req.write(data+"\n")的"\n"也不是必須的,這個有待研究。。。

補充:

bodyparser的程式碼在”\node_modules\express\node_modules\connect\lib\middleware\bodyParser.js“,它其實什麼都沒做,只是把解析body的任務派發給了另外3箇中間件:./multipart, ./urlencoded, ./json:

  • ./multipart 負責 multipart/form-data 型別。
  • ./urlencoded 負責 application/x-www-form-urlencoded 型別。
  • ./json 負責 application/json 型別。

相關推薦

Nodejs 傳送HTTP POST請求例項

專案裡面需要用到使用NodeJs來轉發HTTP POST請求,研究了很久最後才弄通,把過程記錄一下: 接收端程式碼很簡單,就是回送body.address屬性: exports.sendEmail = function (req, res) { res.send(

C# 後臺傳送http post請求

/// <summary>         /// 後臺傳送post請求         /// </summary>         /// <param name="url">請求地址</param>         ///

傳送HTTP POST請求工具類

package com.example.demo; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class HttpUtilTest { /** * @作用

如何簡單的模擬傳送http post請求

有天在做專案演示的時候要用到post請求的模擬傳送,為此總不至於寫一個html頁面,當時只記得百度了一下模擬傳送http post請求,方法大概都是說用fiddler工具或者使用cmd內建telnet客戶端模擬http請求。這裡抄送附上fiddler工具和telnet模擬po

java傳送http post請求

import java.lang.reflect.Method; import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.Iterator; import java.ut

java傳送https post請求例項

用於進行Https請求的HttpClient  SSLClient.Java import java.security.cert.CertificateException;  

java傳送https post請求例項

用於進行Https請求的HttpClient  SSLClient.java import java.security.cert.CertificateException; import java.

java傳送帶Basic Auth認證的http post請求例項程式碼

Base64加密方式認證方式下的basic auth。 注意 base64的basic auth 使用 httpclient自帶的認證方式如下會認證失敗: CredentialsProvider provider = new BasicCreden

關於傳送http POST請求到另一個系統

剛畢業 也是剛剛接觸 這一塊的知識 接收端是springmvc註解 設定了接收資料為json 編碼為utf-8 請求型別為post package wzh.Http; import java.io.BufferedReader; import java.io.IOE

使用Python傳送http post請求上傳檔案

可以使用第三方模組poster,使用easy_install 安裝方法如下 easy_instll poster 會自動安裝poster模組,安裝成功後,可以看到在poster egg檔案在site package下 這裡注意,根據官方說法:Because this dis

php 傳送http post請求

php curl post請求中攜帶header引數 php curl post請求中攜帶header引數 $url = 'http://localhost/test.php'; $ch = curl_init (); // curl_setopt (

nodejs http 傳送get,post請求

GET請求 var http = require('http'); var querystring = require('querystring'); var data =

HttpPost請求例項

private static string HttpPostRequest(string url, byte[] bodyBytes) { HttpWebRequest request = null; try

簡單的 http 傳送非同步post請求

 public static bool DoPost(string postUrl,Dictionary<string, object> parameters,string userToken,out JObject obj)         {        

c++ HTTP POST請求 向伺服器傳送json資料

本文只是記錄作者學習c++ http已post請求傳送資料 一 .首先要選擇一個第三方庫,我這裡用的是 libcurl 2. 用VS2013開啟工程curl-7.26.0\lib\libcurl.vcproj,可以直接編譯成功,編譯成libcurl.lib靜態庫 二

golang:模擬http post請求

brush else div str response inf 啟動 quest ack   1,發送http post請求(客戶端) func httppost() { data :=`{"type":"10","msg":"hello."}` request,

Java 發送http post 請求

cti httputil param null 支持 value 響應 span util package com.sm.utils; import java.io.BufferedReader; import java.io.InputStreamReader; im

【Python】Http Post請求四種請求體的Python實現

article gif 提交 直接 方法 method 根據 encode 文獻 前言 前幾天一個剛接觸Python不深的朋友問我的Python的xml格式Post請求怎麽發送,剛好最近也在看Http請求相關的內容,所以決定總結一下。 Content-Type Conte

HttpClient post 請求例項

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

HTTP POST請求報文格式分析與Java實現檔案上傳

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!