来自Python的Node JS发布请求

时间:2019-02-08 12:26:25

标签: python node.js http

[免责声明:我绝对是Web工程领域的初学者!:)]

我构建了一个带有小型数据库的NodeJS服务器,用于存储用户及其密码。 我为此创建了一个小网站,您可以在其中输入用户名和密码,并为您创建一个会话,以便您登录。<​​/ p>

现在,我想用Python编写一些东西来自动登录一个小树莓。 经过大量研究,我想出了一个像这样的 python程序:

import requests 
def authentification():
s              = Session();

req = Request('POST', "http://192.168.7.1:3000/auth")
prepped = req.prepare()
prepped.body = 'username=test&password=test'

#del prepped.headers['Content-Type']

resp = s.send(prepped)
print resp.text
r = requests.get('http://192.168.7.1:3000/home')
print r.text

我在NodeJS应用程序中的功能如下:

  app.post('/auth', function(request, response) {
    var username = request.body.username;
    var password = request.body.password;
    console.log("Somebody tries to acces");
    console.log(username)
    if (username && password) {
        connection.query('SELECT * FROM accounts WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
            if (results.length > 0) {
                request.session.loggedin = true;
                request.session.cookie.maxAge = 3000;
                request.session.username = username;
                response.redirect('/home');
            } else {
                response.send('Incorrect Username and/or Password!');
            }           
            response.end();
        });
    } else {
        response.send('Please enter Username and Password!');
        response.end();
    }
});

当我尝试通过您的程序在浏览器中进行身份验证时,我将得到以下结果:response.send('请输入用户名和密码!'); 我的发帖请求有什么问题,我需要更改什么才能找到我的密码和用户名?

对我来说,另一个重要的问题是我如何使Session在Python中保持清醒状态以执行其他一些请求。对于文件等?

非常感谢您的帮助! 如果我的问题或我提供的输入存在任何问题,请告诉我我会提供您所需的信息!

亲切问候 卡尔

1 个答案:

答案 0 :(得分:0)

Python部分(客户端)

通过requests module,您可以使用data属性发送 post 请求,并向其中提供包含有效负载的 dictionary 。看起来像这样

import requests

url = 'http://localhost:3000/auth'

correct_payload = {'username': 'hello', 'password': 'p4$$w0rd!'}
wrong_payload = {'username': 'hello'}

# Output => OK
r = requests.post(url, data=correct_payload)
print(r.text)

# Output => You need to provide Username & password
r = requests.post(url, data=wrong_payload)
print(r.text)

Node.JS部分(服务器)

要解析从客户端接收的数据,请使用body-parser包作为Express.js middleware。这将解析并将您的数据放入req.body中。代码将如下所示:

const express = require('express')
const bodyParser = require('body-parser')

const port = 3000
const app = express()
app.use(bodyParser.urlencoded({ extended: false }))

app.post('/auth', (req, res) => {
  const { username, password } = req.body;

  if (username && password) {
    res.send('OK'); // ALL GOOD
  } else {
    res.status(400).send('You need to provide Username & password'); // BAD REQUEST 
  }
});


app.listen(port, () => console.log(`Example app listening on port ${port}!`))