복붙노트

[NODEJS] 어떻게 HTTP POST 요청은 Node.js를 이루어집니다?

NODEJS

어떻게 HTTP POST 요청은 Node.js를 이루어집니다?

해결법


  1. 1.여기에 구글 컴파일러 API에 POST 요청을하려면 Node.js를를 사용하는 예는 다음과 같습니다

    여기에 구글 컴파일러 API에 POST 요청을하려면 Node.js를를 사용하는 예는 다음과 같습니다

    // We need this to build our post string
    var querystring = require('querystring');
    var http = require('http');
    var fs = require('fs');
    
    function PostCode(codestring) {
      // Build the post string from an object
      var post_data = querystring.stringify({
          'compilation_level' : 'ADVANCED_OPTIMIZATIONS',
          'output_format': 'json',
          'output_info': 'compiled_code',
            'warning_level' : 'QUIET',
            'js_code' : codestring
      });
    
      // An object of options to indicate where to post to
      var post_options = {
          host: 'closure-compiler.appspot.com',
          port: '80',
          path: '/compile',
          method: 'POST',
          headers: {
              'Content-Type': 'application/x-www-form-urlencoded',
              'Content-Length': Buffer.byteLength(post_data)
          }
      };
    
      // Set up the request
      var post_req = http.request(post_options, function(res) {
          res.setEncoding('utf8');
          res.on('data', function (chunk) {
              console.log('Response: ' + chunk);
          });
      });
    
      // post the data
      post_req.write(post_data);
      post_req.end();
    
    }
    
    // This is an async file read
    fs.readFile('LinkedList.js', 'utf-8', function (err, data) {
      if (err) {
        // If this were just a small part of the application, you would
        // want to handle this differently, maybe throwing an exception
        // for the caller to handle. Since the file is absolutely essential
        // to the program's functionality, we're going to exit with a fatal
        // error instead.
        console.log("FATAL An error occurred trying to read in the file: " + err);
        process.exit(-2);
      }
      // Make sure there's data before we post it
      if(data) {
        PostCode(data);
      }
      else {
        console.log("No data to post");
        process.exit(-1);
      }
    });
    

    내가 대신 하드 코딩 된 문자열, 파일에서 데이터를 게시하는 방법을 보여주기 위해 코드를 업데이트했습니다. 그것은 성공적인 읽기 후 실제 코드를 게시,이를 달성하기 위해 비동기 fs.readFile 명령을 사용합니다. 오류가있는 경우가 발생하고, 데이터가 존재하지 않는 경우는 음의 값으로 프로세스가 종료 실패를 나타냅니다.


  2. 2.당신이 요청 라이브러리를 사용하는 경우이 쉽게 많이 얻을 수 있습니다.

    당신이 요청 라이브러리를 사용하는 경우이 쉽게 많이 얻을 수 있습니다.

    var request = require('request');
    
    request.post(
        'http://www.yoursite.com/formpage',
        { json: { key: 'value' } },
        function (error, response, body) {
            if (!error && response.statusCode == 200) {
                console.log(body);
            }
        }
    );
    

    이외에도 멋진 구문을 제공에서 그것은 JSON 요청 쉬운 핸들 (등, 트위터)에 서명하여 OAuth, 여러 부분으로 양식을 할 수있다 (예를 들어, 업로드 파일) 및 스트리밍을합니다.

    설치 요청을 NPM 요청 use 명령을 설치하려면


  3. 3.당신은 요청 라이브러리를 사용할 수 있습니다. https://www.npmjs.com/package/request

    당신은 요청 라이브러리를 사용할 수 있습니다. https://www.npmjs.com/package/request

    var request = require('request');
    

    JSON 데이터를 게시하려면 :

    var myJSONObject = { ... };
    request({
        url: "http://josiahchoi.com/myjson",
        method: "POST",
        json: true,   // <--Very important!!!
        body: myJSONObject
    }, function (error, response, body){
        console.log(response);
    });
    

    포스트 CML 타타 :

    var myXMLText = '<xml>...........</xml>'
    request({
        url: "http://josiahchoi.com/myjson",
        method: "POST",
        headers: {
            "content-type": "application/xml",  // <--Very important!!!
        },
        body: myXMLText
    }, function (error, response, body){
        console.log(response);
    });
    

  4. 4.나는 생산을 위해 Restler와 바늘을 사용합니다. 그들은 둘 다 훨씬 더 강력한 기본 HttpRequest를보다. 그것은 기본 인증, 특수 헤더 항목 또는 업로드 / 다운로드 파일과 요청에 가능하다.

    나는 생산을 위해 Restler와 바늘을 사용합니다. 그들은 둘 다 훨씬 더 강력한 기본 HttpRequest를보다. 그것은 기본 인증, 특수 헤더 항목 또는 업로드 / 다운로드 파일과 요청에 가능하다.

    게시물에 대한 AS / 작업을 얻을, 그들은 또한 HttpRequest를를 사용하여 원시 아약스 통화보다 사용하기 훨씬 간단하다.

    needle.post('https://my.app.com/endpoint', {foo:'bar'}, 
        function(err, resp, body){
            console.log(body);
    });
    

  5. 5.간단하고 의존성이없는. 당신은 결과를 기다리는 수 있도록 약속을 사용합니다. 그것은 응답 본문을 반환하고 응답 상태 코드를 확인하지 않습니다.

    간단하고 의존성이없는. 당신은 결과를 기다리는 수 있도록 약속을 사용합니다. 그것은 응답 본문을 반환하고 응답 상태 코드를 확인하지 않습니다.

    const https = require('https');
    
    function httpsPost({body, ...options}) {
        return new Promise((resolve,reject) => {
            const req = https.request({
                method: 'POST',
                ...options,
            }, res => {
                const chunks = [];
                res.on('data', data => chunks.push(data))
                res.on('end', () => {
                    let body = Buffer.concat(chunks);
                    switch(res.headers['content-type']) {
                        case 'application/json':
                            body = JSON.parse(body);
                            break;
                    }
                    resolve(body)
                })
            })
            req.on('error',reject);
            if(body) {
                req.write(body);
            }
            req.end();
        })
    }
    

    용법:

    const res = await httpsPost({
        hostname: 'sentry.io',
        path: `/api/0/organizations/org/releases/${changesetId}/deploys/`,
        headers: {
            'Authorization': `Bearer ${process.env.SENTRY_AUTH_TOKEN}`,
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            environment: isLive ? 'production' : 'demo',
        })
    })
    

  6. 6.당신이 노드에 HTTP POST 요청을 만들기 위해 사용할 수있는 오픈 소스 라이브러리 수십 있습니다.

    당신이 노드에 HTTP POST 요청을 만들기 위해 사용할 수있는 오픈 소스 라이브러리 수십 있습니다.

    const axios = require('axios');
    
    const data = {
        name: 'John Doe',
        job: 'Content Writer'
    };
    
    axios.post('https://reqres.in/api/users', data)
        .then((res) => {
            console.log(`Status: ${res.status}`);
            console.log('Body: ', res.data);
        }).catch((err) => {
            console.error(err);
        });
    
    const needle = require('needle');
    
    const data = {
        name: 'John Doe',
        job: 'Content Writer'
    };
    
    needle('post', 'https://reqres.in/api/users', data, {json: true})
        .then((res) => {
            console.log(`Status: ${res.statusCode}`);
            console.log('Body: ', res.body);
        }).catch((err) => {
            console.error(err);
        });
    
    const request = require('request');
    
    const options = {
        url: 'https://reqres.in/api/users',
        json: true,
        body: {
            name: 'John Doe',
            job: 'Content Writer'
        }
    };
    
    request.post(options, (err, res, body) => {
        if (err) {
            return console.log(err);
        }
        console.log(`Status: ${res.statusCode}`);
        console.log(body);
    });
    
    const https = require('https');
    
    const data = JSON.stringify({
        name: 'John Doe',
        job: 'Content Writer'
    });
    
    const options = {
        hostname: 'reqres.in',
        path: '/api/users',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': data.length
        }
    };
    
    
    const req = https.request(options, (res) => {
        let data = '';
    
        console.log('Status Code:', res.statusCode);
    
        res.on('data', (chunk) => {
            data += chunk;
        });
    
        res.on('end', () => {
            console.log('Body: ', JSON.parse(data));
        });
    
    }).on("error", (err) => {
        console.log("Error: ", err.message);
    });
    
    req.write(data);
    req.end();
    

    자세한 내용은이 문서를 확인하십시오.


  7. 7.또한 Requestify, 내가 nodeJS을 위해 쓴 정말 멋진 간단한 HTTP 클라이언트를 사용할 수 있습니다 +는 캐싱을 지원합니다.

    또한 Requestify, 내가 nodeJS을 위해 쓴 정말 멋진 간단한 HTTP 클라이언트를 사용할 수 있습니다 +는 캐싱을 지원합니다.

    그냥 다음을 수행 :

        var requestify = require('requestify');
    
        requestify.post('http://example.com', {
            hello: 'world'
        })
        .then(function(response) {
            // Get the response body (JSON parsed or jQuery object for XMLs)
            response.getBody();
        });
    

  8. 8.업데이트 2020 :

    업데이트 2020 :

    정말 망막 기억을 즐기고 있었어요 - 울트라 경량 Node.js를 HTTP 클라이언트를

    그것은 두 가지 방법으로 사용할 수 있습니다. 약속 (비동기 / 기다리고 있습니다)와 전통적인 콜백 스타일 다른 한 가지.

    고도와 망막 기억 :를 통해 설치

    스트레이트 await를 가진 그것의 README에서 :

    const p = require('phin')
    
    await p({
        url: 'https://ethanent.me',
        method: 'POST',
        data: {
            hey: 'hi'
        }
    })
    

    Unpromisifed (콜백) 스타일 :

    const p = require('phin').unpromisified
    
    p('https://ethanent.me', (err, res) => {
        if (!err) console.log(res.body)
    })
    

    2015 최소 코딩이 수행 할 수있는 다른 라이브러리의 다양한 해주기있다. 나는 많이 당신이 절대적으로 낮은 수준의 HTTP 물건을 제어 할 필요가 요청하지 않는 한 HTTP 우아한 경량 라이브러리를 선호합니다.

    하나는 이러한 라이브러리는 Unirest입니다

    설치하려면 NPM을 사용합니다. $ NPM은 unirest 설치

    그리고 안녕하세요, 세계 위에! 모두가 익숙한 것을 예.

    var unirest = require('unirest');
    
    unirest.post('http://example.com/helloworld')
    .header('Accept', 'application/json')
    .send({ "Hello": "World!" })
    .end(function (response) {
      console.log(response.body);
    });
    

    특별한: 많은 사람들은 요청의 사용을 제안하는 [2]

    이 장면 뒤에 Unirest 요청 라이브러리를 사용 협조 할 수 있어야합니다.

    Unirest 직접 요청 객체에 액세스하기위한 방법을 제공한다.

    예:

    var Request = unirest.get('http://mockbin.com/request');
    

  9. 9.

    var https = require('https');
    
    
    /**
     * HOW TO Make an HTTP Call - POST
     */
    // do a POST request
    // create the JSON object
    jsonObject = JSON.stringify({
        "message" : "The web of things is approaching, let do some tests to be ready!",
        "name" : "Test message posted with node.js",
        "caption" : "Some tests with node.js",
        "link" : "http://www.youscada.com",
        "description" : "this is a description",
        "picture" : "http://youscada.com/wp-content/uploads/2012/05/logo2.png",
        "actions" : [ {
            "name" : "youSCADA",
            "link" : "http://www.youscada.com"
        } ]
    });
    
    // prepare the header
    var postheaders = {
        'Content-Type' : 'application/json',
        'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
    };
    
    // the post options
    var optionspost = {
        host : 'graph.facebook.com',
        port : 443,
        path : '/youscada/feed?access_token=your_api_key',
        method : 'POST',
        headers : postheaders
    };
    
    console.info('Options prepared:');
    console.info(optionspost);
    console.info('Do the POST call');
    
    // do the POST call
    var reqPost = https.request(optionspost, function(res) {
        console.log("statusCode: ", res.statusCode);
        // uncomment it for header details
    //  console.log("headers: ", res.headers);
    
        res.on('data', function(d) {
            console.info('POST result:\n');
            process.stdout.write(d);
            console.info('\n\nPOST completed');
        });
    });
    
    // write the json data
    reqPost.write(jsonObject);
    reqPost.end();
    reqPost.on('error', function(e) {
        console.error(e);
    });
    

  10. 10.모듈을 '요구'를 사용 : 이것은 내가 메이크업 요청에 사용하는 간단한 방법입니다.

    모듈을 '요구'를 사용 : 이것은 내가 메이크업 요청에 사용하는 간단한 방법입니다.

    명령 '요청'모듈을 설치합니다 :

    $ npm install request
    

    예제 코드 :

    var request = require('request')
    
    var options = {
      method: 'post',
      body: postData, // Javascript object
      json: true, // Use,If you are sending JSON data
      url: url,
      headers: {
        // Specify headers, If any
      }
    }
    
    request(options, function (err, res, body) {
      if (err) {
        console.log('Error :', err)
        return
      }
      console.log(' Body :', body)
    
    });
    

    당신은 또한 요청을하려면 Node.js를 내장 된 'HTTP'모듈을 사용할 수 있습니다.


  11. 11.나는 슈퍼 에이전트 (https://github.com/visionmedia/superagent)의 단순함을 좋아한다. 노드와 브라우저 모두에서 동일한 API.

    나는 슈퍼 에이전트 (https://github.com/visionmedia/superagent)의 단순함을 좋아한다. 노드와 브라우저 모두에서 동일한 API.

    ;(async function() {
      var response = await superagent.post('http://127.0.0.1:8125/', {age: 2})
      console.log(response)
    })
    
    

    경기가 브라우저에서 가져올 수 있다는 API를 가지고 노드 페치가 (https://www.npmjs.com/package/node-fetch)도있다 - 그러나이 자동으로 콘텐츠 형식을 처리하지 않습니다, 수동 쿼리 문자열 인코딩이 필요합니다, 정도 어떤 다른 일 슈퍼 에이전트의 않습니다.


  12. 12.당신이 약속을 기반으로 HTTP 요청을 찾고 있다면, Axios의 멋지게의 작업을 수행합니다.

    당신이 약속을 기반으로 HTTP 요청을 찾고 있다면, Axios의 멋지게의 작업을 수행합니다.

      const axios = require('axios');
    
      axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'})
          .then((response) => console.log(response))
          .catch((error) => console.log(error));
    

    또는

    await axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'})
    

  13. 13.에 게시 나머지 / JSON 요청 우리는 단순히 요청 패키지를 사용하여 우리는 JSON 변수에 보내야하는 값을 저장할 수 있습니다.

    에 게시 나머지 / JSON 요청 우리는 단순히 요청 패키지를 사용하여 우리는 JSON 변수에 보내야하는 값을 저장할 수 있습니다.

    먼저하여 콘솔에서 패키지를 필요로 설치 NPM 요청 --save 설치

    var request = require('request');
    
        var options={
                    'key':'28',
                    'key1':'value',
                    'key2':'value'
                    }
    
        request({
                 url:"http://dev.api.ean.com/ean-services/rs/hotel/v3/ping?                      
                     minorRev="+options.key+
                     "&cid="+options.key1+
                     "&apiKey="+options.key2,
                 method:"POST",
                 json:true},function(error,response,body){
                         console.log(body)
                   }
        );
    

  14. 14.나는 이것을 달성하는 방법을 설명하는 비디오를 발견 https://www.youtube.com/watch?v=nuw48-u3Yrg

    나는 이것을 달성하는 방법을 설명하는 비디오를 발견 https://www.youtube.com/watch?v=nuw48-u3Yrg

    그것은 "쿼리 문자열"과 "StringBuilder의"모듈과 함께 기본 "HTTP"모듈을 사용합니다. 응용 프로그램 (글 상자의 값을 지속와 함께) 두의 반환 합 제출 웹 페이지에서와시 (두 개의 텍스트 상자 사용) 두 숫자를합니다. 이것은 내가 다른 곳에서는 찾을 수있는 가장 좋은 예입니다.

    var http = require("http");
    var qs = require("querystring");
    var StringBuilder = require("stringbuilder");
    
    var port = 9000;
    
    function getCalcHtml(req, resp, data) {
        var sb = new StringBuilder({ newline: "\r\n" });
        sb.appendLine("<html>");
        sb.appendLine(" <body>");
        sb.appendLine("     <form method='post'>");
        sb.appendLine("         <table>");
        sb.appendLine("             <tr>");
        sb.appendLine("                 <td>Enter First No: </td>");
    
        if (data && data.txtFirstNo) {
            sb.appendLine("                 <td><input type='text' id='txtFirstNo' name='txtFirstNo' value='{0}'/></td>", data.txtFirstNo);
        }
        else {
            sb.appendLine("                 <td><input type='text' id='txtFirstNo' name='txtFirstNo' /></td>");
        }
    
        sb.appendLine("             </tr>");
        sb.appendLine("             <tr>");
        sb.appendLine("                 <td>Enter Second No: </td>");
    
        if (data && data.txtSecondNo) {
            sb.appendLine("                 <td><input type='text' id='txtSecondNo' name='txtSecondNo' value='{0}'/></td>", data.txtSecondNo);
        }
        else {
            sb.appendLine("                 <td><input type='text' id='txtSecondNo' name='txtSecondNo' /></td>");
        }
    
        sb.appendLine("             </tr>");
        sb.appendLine("             <tr>");
        sb.appendLine("                 <td><input type='submit' value='Calculate' /></td>");
        sb.appendLine("             </tr>");
    
        if (data && data.txtFirstNo && data.txtSecondNo) {
            var sum = parseInt(data.txtFirstNo) + parseInt(data.txtSecondNo);
            sb.appendLine("             <tr>");
            sb.appendLine("                 <td>Sum: {0}</td>", sum);
            sb.appendLine("             </tr>");
        }
    
        sb.appendLine("         </table>");
        sb.appendLine("     </form>")
        sb.appendLine(" </body>");
        sb.appendLine("</html>");
        sb.build(function (err, result) {
            resp.write(result);
            resp.end();
        });
    }
    
    function getCalcForm(req, resp, data) {
        resp.writeHead(200, { "Content-Type": "text/html" });
        getCalcHtml(req, resp, data);
    }
    
    function getHome(req, resp) {
        resp.writeHead(200, { "Content-Type": "text/html" });
        resp.write("<html><html><head><title>Home</title></head><body>Want to some calculation? Click <a href='/calc'>here</a></body></html>");
        resp.end();
    }
    
    function get404(req, resp) {
        resp.writeHead(404, "Resource Not Found", { "Content-Type": "text/html" });
        resp.write("<html><html><head><title>404</title></head><body>404: Resource not found. Go to <a href='/'>Home</a></body></html>");
        resp.end();
    }
    
    function get405(req, resp) {
        resp.writeHead(405, "Method not supported", { "Content-Type": "text/html" });
        resp.write("<html><html><head><title>405</title></head><body>405: Method not supported</body></html>");
        resp.end();
    }
    
    http.createServer(function (req, resp) {
        switch (req.method) {
            case "GET":
                if (req.url === "/") {
                    getHome(req, resp);
                }
                else if (req.url === "/calc") {
                    getCalcForm(req, resp);
                }
                else {
                    get404(req, resp);
                }
                break;
            case "POST":
                if (req.url === "/calc") {
                    var reqBody = '';
                    req.on('data', function (data) {
                        reqBody += data;
                        if (reqBody.length > 1e7) { //10MB
                            resp.writeHead(413, 'Request Entity Too Large', { 'Content-Type': 'text/html' });
                            resp.end('<!doctype html><html><head><title>413</title></head><body>413: Request Entity Too Large</body></html>');
                        }
                    });
                    req.on('end', function () {
                        var formData = qs.parse(reqBody);
                        getCalcForm(req, resp, formData);
                    });
                }
                else {
                    get404(req, resp);
                }
                break;
            default:
                get405(req, resp);
                break;
        }
    }).listen(port);
    

  15. 15.POST와 GET에 대한이 내 솔루션입니다.

    POST와 GET에 대한이 내 솔루션입니다.

    포스트 방법에 관하여 :

    몸은 JSON 객체 인 경우, 그것은 중요 그래서 JSON.stringify와 직렬화 가능성이 따라 내용 - 아이폰에 헤더를 설정합니다 :

          var bodyString=JSON.stringify(body)
          var _headers = {
            'Content-Length': Buffer.byteLength(bodyString)
          };
    

    요청에 쓰기 전에 :

    request.write( bodyString );
    

    모두 가져 오기 및 게시 방법 소개 :

    제한 시간은 소켓 분리로 발생할 수 있습니다, 그래서 당신은 핸들러 등을 등록해야합니다 :

    request.on('socket', function (socket) {
            socket.setTimeout( self.timeout );
            socket.on('timeout', function() {
                request.abort();
                if(timeout) return timeout( new Error('request timed out') );
            });
        });
    

    요청 핸들러 반면

           request.on('timeout', function () {
              // Timeout happend. Server received request, but not handled it
              // (i.e. doesn't send any response or it took to long).
              // You don't know what happend.
              // It will emit 'error' message as well (with ECONNRESET code).
              req.abort();
              if(timeout) return timeout( new Error('request timed out') );
            });
    

    난 강력하게 모두 핸들러를 등록하는 것이 좋습니다.

    당신은 데이터 핸들러에서 청크를 CONCAT해야하므로 응답 본문은 청크 :

          var body = '';
          response.on('data', function(d) {
              body += d;
          });
    

    끝에서 몸 전체 응답 본문을 포함합니다 :

          response.on('end', function() {
            try {
                var jsonResponse=JSON.parse(body);
                if(success) return success( jsonResponse );
            } catch(ex) { // bad json
              if(error) return error(ex.toString());
            }
          });
    

    확실 실제로 잘 포맷 된 JSON이며 요청을 할 때 반드시 그것을 할 수있는 방법이 없다는 것을 할 수 없기 때문에이 시도 ... catchtheJSON.parse`로 포장하는 것이 안전합니다.

    모듈 : 개의 SimpleAPI를

    /**
     * Simple POST and GET
     * @author Loreto Parisi (loretoparisi at gmail dot com)
    */
    (function() {
    
      var SimpleAPI;
    
      SimpleAPI = (function() {
    
        var qs = require('querystring');
    
        /**
         * API Object model
         * @author Loreto Parisi (loretoparisi at gmail dot com)
         */
        function SimpleAPI(host,port,timeout,ssl,debug,json) {
    
          this.host=host;
          this.port=port;
          this.timeout=timeout;
          /** true to use ssl - defaults to true */
          this.ssl=ssl || true;
          /** true to console log */
          this.debug=debug;
          /** true to parse response as json - defaults to true */
          this.json= (typeof(json)!='undefined')?json:true;
          this.requestUrl='';
          if(ssl) { // use ssl
              this.http = require('https');
          } else { // go unsafe, debug only please
              this.http = require('http');
          }
        }
    
        /**
         * HTTP GET
         * @author Loreto Parisi (loretoparisi at gmail dot com)
         */
        SimpleAPI.prototype.Get = function(path, headers, params, success, error, timeout) {
    
          var self=this;
          if(params) {
            var queryString=qs.stringify(params);
            if( queryString ) {
              path+="?"+queryString;
            }
          }
          var options = {
            headers : headers,
            hostname: this.host,
            path: path,
            method: 'GET'
          };
          if(this.port && this.port!='80') { // port only if ! 80
            options['port']=this.port;
          }
          if(self.debug) {
            console.log( "SimpleAPI.Get", headers, params, options );
          }
          var request=this.http.get(options, function(response) {
    
              if(self.debug) { // debug
                console.log( JSON.stringify(response.headers) );
              }
    
              // Continuously update stream with data
              var body = '';
              response.on('data', function(d) {
                  body += d;
              });
              response.on('end', function() {
                try {
                  if(self.json) {
                    var jsonResponse=JSON.parse(body);
                    if(success) return success( jsonResponse );
                  }
                  else {
                    if(success) return success( body );
                  }
                } catch(ex) { // bad json
                  if(error) return error( ex.toString() );
                }
              });
            });
            request.on('socket', function (socket) {
                socket.setTimeout( self.timeout );
                socket.on('timeout', function() {
                    request.abort();
                    if(timeout) return timeout( new Error('request timed out') );
                });
            });
            request.on('error', function (e) {
              // General error, i.e.
              //  - ECONNRESET - server closed the socket unexpectedly
              //  - ECONNREFUSED - server did not listen
              //  - HPE_INVALID_VERSION
              //  - HPE_INVALID_STATUS
              //  - ... (other HPE_* codes) - server returned garbage
              console.log(e);
              if(error) return error(e);
            });
            request.on('timeout', function () {
              // Timeout happend. Server received request, but not handled it
              // (i.e. doesn't send any response or it took to long).
              // You don't know what happend.
              // It will emit 'error' message as well (with ECONNRESET code).
              req.abort();
              if(timeout) return timeout( new Error('request timed out') );
            });
    
            self.requestUrl = (this.ssl?'https':'http') + '://' + request._headers['host'] + request.path;
            if(self.debug) {
              console.log("SimpleAPI.Post",self.requestUrl);
            }
            request.end();
        } //RequestGet
    
        /**
         * HTTP POST
         * @author Loreto Parisi (loretoparisi at gmail dot com)
         */
        SimpleAPI.prototype.Post = function(path, headers, params, body, success, error, timeout) {
          var self=this;
    
          if(params) {
            var queryString=qs.stringify(params);
            if( queryString ) {
              path+="?"+queryString;
            }
          }
          var bodyString=JSON.stringify(body)
          var _headers = {
            'Content-Length': Buffer.byteLength(bodyString)
          };
          for (var attrname in headers) { _headers[attrname] = headers[attrname]; }
    
          var options = {
            headers : _headers,
            hostname: this.host,
            path: path,
            method: 'POST',
            qs : qs.stringify(params)
          };
          if(this.port && this.port!='80') { // port only if ! 80
            options['port']=this.port;
          }
          if(self.debug) {
            console.log( "SimpleAPI.Post\n%s\n%s", JSON.stringify(_headers,null,2), JSON.stringify(options,null,2) );
          }
          if(self.debug) {
            console.log("SimpleAPI.Post body\n%s", JSON.stringify(body,null,2) );
          }
          var request=this.http.request(options, function(response) {
    
              if(self.debug) { // debug
                console.log( JSON.stringify(response.headers) );
              }
    
              // Continuously update stream with data
              var body = '';
              response.on('data', function(d) {
                  body += d;
              });
              response.on('end', function() {
                try {
                    console.log("END", body);
                    var jsonResponse=JSON.parse(body);
                    if(success) return success( jsonResponse );
                } catch(ex) { // bad json
                  if(error) return error(ex.toString());
                }
              });
    
            });
    
            request.on('socket', function (socket) {
                socket.setTimeout( self.timeout );
                socket.on('timeout', function() {
                    request.abort();
                    if(timeout) return timeout( new Error('request timed out') );
                });
            });
            request.on('error', function (e) {
              // General error, i.e.
              //  - ECONNRESET - server closed the socket unexpectedly
              //  - ECONNREFUSED - server did not listen
              //  - HPE_INVALID_VERSION
              //  - HPE_INVALID_STATUS
              //  - ... (other HPE_* codes) - server returned garbage
              console.log(e);
              if(error) return error(e);
            });
            request.on('timeout', function () {
              // Timeout happend. Server received request, but not handled it
              // (i.e. doesn't send any response or it took to long).
              // You don't know what happend.
              // It will emit 'error' message as well (with ECONNRESET code).
              req.abort();
              if(timeout) return timeout( new Error('request timed out') );
            });
    
            self.requestUrl = (this.ssl?'https':'http') + '://' + request._headers['host'] + request.path;
            if(self.debug) {
              console.log("SimpleAPI.Post",self.requestUrl);
            }
    
            request.write( bodyString );
            request.end();
    
        } //RequestPost
    
        return SimpleAPI;
    
      })();
    
      module.exports = SimpleAPI
    
    }).call(this);
    

    용법:

    // Parameters
    // domain: example.com
    // ssl:true, port:80
    // timeout: 30 secs
    // debug: true
    // json response:true
    var api = new SimpleAPI('posttestserver.com', 80, 1000 * 10, true, true, true); 
    
    var headers = {
        'Content-Type' : 'application/json',
        'Accept' : 'application/json' 
    };
    var params = {
      "dir" : "post-test"
    };
    var method = 'post.php';
    
    api.Post(method, headers, params, body
        , function(response) { // success
           console.log( response );
        }
        , function(error) { // error
          console.log( error.toString() );
        }
        , function(error) { // timeout
           console.log( new Error('timeout error') );
        });
    

  16. 16.게시물을 처리하고 내 프로젝트에 대한 요청을받을 수있는 낮은 수준의 유틸리티를 작성하는 동안 많은 어려움을 겪고 후, 나는 여기 내 노력을 게시하기로 결정했다. 대부분 허용 대답의 라인, 여기에 JSON 데이터를 전송하기 위해 HTTP 및 HTTPS POST 요청을 만들기위한 코드 조각입니다.

    게시물을 처리하고 내 프로젝트에 대한 요청을받을 수있는 낮은 수준의 유틸리티를 작성하는 동안 많은 어려움을 겪고 후, 나는 여기 내 노력을 게시하기로 결정했다. 대부분 허용 대답의 라인, 여기에 JSON 데이터를 전송하기 위해 HTTP 및 HTTPS POST 요청을 만들기위한 코드 조각입니다.

    const http = require("http")
    const https = require("https")
    
    // Request handler function
    let postJSON = (options, postData, callback) => {
    
        // Serializing JSON
        post_data = JSON.stringify(postData)
    
        let port = options.port == 443 ? https : http
    
        // Callback function for the request
        let req = port.request(options, (res) => {
            let output = ''
            res.setEncoding('utf8')
    
            // Listener to receive data
            res.on('data', (chunk) => {
                output += chunk
            });
    
            // Listener for intializing callback after receiving complete response
            res.on('end', () => {
                let obj = JSON.parse(output)
                callback(res.statusCode, obj)
            });
        });
    
       // Handle any errors occurred while making request
        req.on('error', (err) => {
            //res.send('error: ' + err.message)
        });
    
        // Request is made here, with data as string or buffer
        req.write(post_data)
        // Ending the request
        req.end()
    };
    
    let callPost = () => {
    
        let data = {
            'name': 'Jon',
            'message': 'hello, world'
        }
    
        let options = {
            host: 'domain.name',       // Your domain name
            port: 443,                 // 443 for https and 80 for http
            path: '/path/to/resource', // Path for the request
            method: 'POST',            
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': Buffer.byteLength(data)
            }
        }
    
        postJSON(options, data, (statusCode, result) => {
            // Handle response
            // Process the received data
        });
    
    }
    

  17. 17.

    let request = require('request');
    let jsonObj = {};
    request({
        url: "https://myapii.com/sendJsonData",
        method: "POST",
        json: true,
        body: jsonObj
        }, function (error, resp, body){
           console.log(resp);
    });
    

    또는 당신은이 라이브러리를 사용할 수 있습니다 :

    let axios = require("axios");
    let jsonObj = {};
    
    const myJsonAPI = axios.create({
       baseURL: 'https://myapii.com',
       timeout: 120*1000
    });
    
    let response = await myJsonAPI.post("sendJsonData",jsonobj).catch(e=>{
        res.json(e);
    });
    console.log(response);
    

  18. 18.Axios의 브라우저와 Node.js.에 대한 약속 기반의 HTTP 클라이언트입니다 Axios의 쉽게 REST 엔드 포인트에 비동기 HTTP 요청을 보내고 CRUD 작업을 수행 할 수 있습니다. 그것은 일반 자바 스크립트 또는 뷰이나 반작용 라이브러리 등을 사용할 수 있습니다.

    Axios의 브라우저와 Node.js.에 대한 약속 기반의 HTTP 클라이언트입니다 Axios의 쉽게 REST 엔드 포인트에 비동기 HTTP 요청을 보내고 CRUD 작업을 수행 할 수 있습니다. 그것은 일반 자바 스크립트 또는 뷰이나 반작용 라이브러리 등을 사용할 수 있습니다.

    const axios = require('axios');
    
            var dataToPost = {
              email: "your email",
              password: "your password"
            };
    
            let axiosConfiguration = {
              headers: {
                  'Content-Type': 'application/json;charset=UTF-8',
                  "Access-Control-Allow-Origin": "*",
              }
            };
    
            axios.post('endpoint or url', dataToPost, axiosConfiguration)
            .then((res) => {
              console.log("Response: ", res);
            })
            .catch((err) => {
              console.log("error: ", err);
            })
    

  19. 19.추가 구성 옵션 및 사용자 정의 헤더를 사용하는 axios.post 요청의 또 다른 Axios의 예를 게시.

    추가 구성 옵션 및 사용자 정의 헤더를 사용하는 axios.post 요청의 또 다른 Axios의 예를 게시.

    VAR postData를 = { 이메일 : "test@test.com" 비밀번호 : "비밀번호" }; axiosConfig = {하자 헤더 : { '콘텐츠 유형': '응용 프로그램 / JSON; 문자셋 = UTF-8', "액세스 제어 - 허용 - 원산지": "*", } }; axios.post ( 'HTTP : // <호스트> : <포트> / <경로>', postData를, axiosConfig) 그 때는 ((해상도) => { CONSOLE.LOG는 ( "응답을받은 :"고해상도를); }) .catch ((ERR) => { 을 console.log ( "Axios의 오류 :"ERR); })


  20. 20.요청 종속성을 이용하여.

    요청 종속성을 이용하여.

    간단한 해결책 :

     import request from 'request'
     var data = {
            "host":"127.1.1.1",
            "port":9008
        }
    
    request.post( baseUrl + '/peers/connect',
            {
                json: data,  // your payload data placed here
                headers: {
                    'X-Api-Key': 'dajzmj6gfuzmbfnhamsbuxivc', // if authentication needed
                    'Content-Type': 'application/json' 
                }
            }, function (error, response, body) {
                if (error) {
                    callback(error, null)
                } else {
                    callback(error, response.body)
                }
            });
    

  21. 21.요청 - 약속은 약속 기반의 응답을 제공합니다. 가 2xx 이외의 HTTP 응답 코드는 약속이 거부 될 것입니다. 이 설정 options.simple = 거짓으로 덮어 쓸 수 있습니다

    요청 - 약속은 약속 기반의 응답을 제공합니다. 가 2xx 이외의 HTTP 응답 코드는 약속이 거부 될 것입니다. 이 설정 options.simple = 거짓으로 덮어 쓸 수 있습니다

    var options = {
      method: 'POST',
      uri: 'http://api.posttestserver.com/post',
      body: {
      some: 'payload'
     },
      json: true // Automatically stringifies the body to JSON
    };
    
    rp(options)
    .then(function (parsedBody) {
        // POST succeeded...
    })
    .catch(function (err) {
        // POST failed...
    });
    
  22. from https://stackoverflow.com/questions/6158933/how-is-an-http-post-request-made-in-node-js by cc-by-sa and MIT license