2016-03-21 3 views
1

ich von @ErikRasKnoten Express leere Körper bei der Verwendung von Python API POST (Anfragen Bibliothek)

Mit dem folgenden Code wird den Starter-Kit bin mit, ich habe Probleme mein Python-Programm zu authentifizieren.

Hier ist meine Python:

import requests 
URL="http://localhost" 
PORT="3030" 

Session = requests.Session() 
Request = Session.post(URL+':'+PORT+'/login', data={'name':'AuthedUserName'}) 
# (Password to follow proof of concept obviously) 

In meiner api.js Datei, die ich hatte gerade:

import express from 'express'; 
import session from 'express-session'; 
import bodyParser from 'body-parser'; 
import config from '../src/config'; 
import * as actions from './actions/index'; 
import {mapUrl} from 'utils/url.js'; 
import http from 'http'; 

const app = express(); 

const server = new http.Server(app); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(session({ 
    secret: 'react and redux rule!!!!', 
    resave: false, 
    saveUninitialized: false, 
    cookie: { maxAge: 60000 } 
})); 

app.use((req, res) => { 
/* There's heaps here, but all that is relevant is: */ 
console.log(req.body) 

in der Konsole i {}

ich diesen Artikel gefunden gerade bin immer : req.body empty on posts und Python Post Request Body appears empty in Node server when sent

aber wie man sehen kann ich schon bodyparser.json bin mit und bodyparser.urlencoded.extended = true

+0

Erhalten Sie 200 von der Python-Seite? Geben Sie 'Request.raise_for_status()' nach der Post-Zeile ein. –

+0

Ich habe 404 bekommen, aber das liegt daran, dass der Knoten req.body.user == 'undefiniert' wurde, so dass die Validierung flach wurde.Aber jetzt, wo ich Header = {} habe, bekomme ich 200 – Brad

Antwort

0

Okay, so verglich ich meine Pythons bitten gegen meine Web-App-Antrag des durch die Anfrage Drucken auf der Konsole Knoten.

Ich fand, dass die Web-App mehr im Header als die Anfrage der Python-Anfragen hatte. WebApp: referer: 'http://localhost:3001/login' Herkunft: 'http://localhost:3001' host: 'http://localhost:3001' Verbindung: 'close'

Also ich dies in meinem Header enthalten, es funktionierte!

Ich wollte sehen, welche Header-Eigenschaft 'notwendig' war, also zog ich allmählich alles heraus, um zu sehen, ob das die POST-Anfrage brach.

Es stellte sich heraus, dass ich es geschafft habe, alles herauszuziehen! Also was ich jetzt benutze ist das:

r = Session.post(URL+':'+PORT+'/login',headers = {}, data={'name':'AuthedUserName'}) 

Das ist es !! Ich würde gerne verstehen, warum headers = {} funktioniert, aber ich muss mit meinem Projekt weitermachen !!

< < < < < < ---- ---- bearbeiten >>>>>>

Above 'Hälfte' richtig ist, da meine Web-App ist json verwenden, und ich will Json verwenden, was ich tun musste, war mein Kopf

headers = {u'content-type': u'application/json'} 

Dann nutzen json.dumps auf nur die Nutzlast ändern!

r = session.post('http://'+DB_URL+':3030/sinumecUpdate', headers = headers, data = json.dumps(dataObject)) 

ich auch

app.use(bodyParser.urlencoded({ extended: true })); 

Von meinem Knoten API ziehen benötigt und bleiben nur die JSON-Parser Körper.

Verwandte Themen