Задать вопрос
@Galdar
Web, JS, PHP, NGINX, Linux

Как создать сервер приема POST GET запросов?

Добрый день.
Хочу создать сервер на прием GET POST запросов. Нашел интересную статью ( https://webdevblog.ru/chto-takoe-cors/ ). Но хочется создать два класса.
1) Это сам сервер принимающий запросы
2) Это просто файлик который будет отправлять на этот же сервер по заданному порту GET POST данные

Если на 1 - й вопрос я ответил. То как отправлять данные со своего сервера на свой сокет GET POST запросов.
Вот накапал GET запрос
GET
request({
    method: 'GET',
    url: 'http://ХХХХХХ:4554/private',
    // параметры GET-запроса
    // index.php?param=edit&value=10
    qs: {
        param: 'edit',
        value: 100
    }
    }, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
        // валидация и 
        // обработка полученного ответа, заголовков
        GET = body;
    }
})


Но не могу сформировать POST. Нахожу пример, но он отправляет пустое тело
POST
var POST = '';

request.post({
    url: 'http://ХХХХХХ:4554/login',
    headers: { 'Content-Type': 'application/json' },
    body: {
        login: 'login1',
        password: 'password1'
    }
    }, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
        // валидация и 
        // обработка полученного ответа, заголовков
        POST = body;
    }
})


Вот так выглядит сокет GET POST запросов
socket
/**
 * Подключение модулей и конфигураций
 */
// Файл конфигураций
const manifest      = require("./manifest.json")
// API HTTP
const express       = require('express')
// Session
const session       = require('express-session')
// HTTP
const { request }   = require('http')

const ALLOWED_ORIGINS = [
    'http://ХХХХХ:4554',
    'http://ХХХХ:4554'
]

/**
 * Объявление модулей и конфигураций
 */
// API HTTP
const app           = express()
// Порт соединения
const PORT = manifest.connection.PORT

const sessionOptions = {
    secret: '123456',
    cookie: {
      maxAge:269999999999
    },
    saveUninitialized: true,
    resave:true
};

app.use(session(sessionOptions));

app.options('*', (req, res) => {
    res.set('Access-Control-Allow-Origin', '*');
    res.set("Access-Control-Allow-Headers", "Content-Type");
    res.send('ok');
});

// GET
app.get('/public', function(req, res) {
    console.log(res)
    console.log(req)
    res.set('Access-Control-Allow-Origin', '*')
    res.set('Access-Control-Allow-Credentials', 'true')
    res.set('Access-Control-Allow-Methods', 'GET, OPTIONS')
    res.set('Access-Control-Allow-Headers', 'Content-Type')
    res.send(JSON.stringify({
        message: 'This is public info'
    }))
})

// POST
app.post('/login', function(req, res) {

    console.log('POST')
    console.log(req.body)

    if(req.body.password === 'secret') {
        req.session.loggedIn = true
        res.send('You are now logged in!')
    } else {
        res.send('Wrong password.')
    }

})

app.get('/private', function(req, res) {

    //console.log(req)
    //console.log(res)

    //console.log(req.headers)
    //console.log(ALLOWED_ORIGINS.indexOf(req.headers.origin))

    if(ALLOWED_ORIGINS.indexOf(req.headers.host) > -1)
    {
      res.set('Access-Control-Allow-Credentials', 'true')
      res.set('Access-Control-Allow-Origin', req.headers.origin)
    }
    else
    { // разрешить другим источникам отправлять неподтвержденные запросы CORS
      res.set('Access-Control-Allow-Origin', '*')        
    }

    // let caches know that the response depends on the origin
    res.set('Vary', 'Origin');

    if(req.session.loggedIn === true)
    {
      res.send('THIS IS THE SECRET')
    }
    else
    {
      res.send('Please login first')
    }

})

app.listen(PORT, (err) => {
    if (err) {
        return console.log('something bad happened', err)
    }
    console.log(`Server is listening on ${PORT}`)
})


И я так понимаю заголовки Access-Control-Allow-****** можно не писать? Если запросы будут прилетать с сервера на сервер.

Может кто уже делал похожее и может дать ценные советы как сделать лучше.
  • Вопрос задан
  • 1660 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы