Seite 1 von 1

Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 08:57
von T1bbY
Hallo,

ich möchte Sensordaten, die ich als Python dict vorliegen habe, in ein Json Object parsen und per Requests.post an einen Webservice senden.
Das Problem ist das egal was ich per POST senden will benutzt er GET und wenn er doch mal POST benutzt ist das Packet aber leer.

Mein PHP Code vom Webservice

Code: Alles auswählen

<?php
include_once("../constants.php");

if ($_POST)
{
$jsonurl = $_POST;
} else {
$jsonurl = $_REQUEST['q'];
}

if ( !empty( $jsonurl ) )
{
$jsonresult = json_decode( $jsonurl, true );

if ( $jsonresult[0] == '140536' || $jsonresult['s']['1'] == '140536' )
{
mysql_connect(DB_SERVER,DB_USER,DB_PASS); //database
mysql_select_db(DB_NAME);

$search=array("\\","\0","\n","\r","\x1a","'",'"');
$replace=array("\\\\","\\0","\\n","\\r","\Z","\'",'\"');
$clean_string = str_replace($search,$replace,$jsonurl);

$time = time();
$remoteip = $_SERVER['REMOTE_ADDR'];

// Adding a field to the db_traffic.tbl in the database, where the info is logged
$sql = "INSERT INTO ".TBL_DB_TRAFFIC." VALUES ('0', '$remoteip', FROM_UNIXTIME($time), '$clean_string', 'WS LOG')";

$result = mysql_query($sql);

$ping = array( 's'=>1, 'u'=>0 );

header('Content-type: application/json; charset=utf-8', true,200);
echo json_encode(array('r'=>$ping ));

} else {
print_r($_REQUEST);
}


} else {
print_r($_REQUEST);
}
Python Code

Code: Alles auswählen

  GNU nano 2.2.6                                                           File: req.py                                                                                                                  Modified  

#!/usr/bin/python
# -*- coding: utf-8 -*-



import json

import requests


url = 'http://*****.**/includes/webservice/ws-dvi.php'

payload = {'s':{'1':'140536','t1':'1,2','t2':'1,2','t3':'1,2','t4':'1,2','t5':'1,2','t6':'1,2','t7':'1,2','t8':'1,2','t9':'1,2','t10':'1,2','t11':'1,2','t12':'1,2','b1':'1,2','b2':'1,2'}}
header = {'content-type': 'application/json'}


r = requests.post(url, json=payload, headers=header)
print(r.status_code)
print(r.headers)
print(r.text)
Ich habs auch schon mit urllib2 probiert aber dort habe ich das selbe Problem.
Wenn ich auch GET wechsel funktioniert das aber das ist keine option.

Ich hoffe ihr könnt mir helfen..

Euer T1bbY

Re: Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 09:16
von Sirius3
@T1bbY: Dein PHP-Code macht nicht das, was Du Dir denkst. Wenn Du json verwendest, ist sowohl $_POST als auch $_REQUEST leer, weil PHP dieses Format nicht automatisch interpretiert.
Richtig wäre etwas in der Art:

Code: Alles auswählen

<?php

if (strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') == 0)
{
    $jsondata = file_get_contents('php://input');
} else {
    $jsondata = $_REQUEST['q'];
}

Re: Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 09:33
von T1bbY
@Sirius3
Danke für die schnelle Antwort :)
Dein Code ergibt Sinn jedoch funktioniert es genauso wenig wie vorher.
Der denkt immer noch ich arbeite mit GET und selbst das ist leer. :/

Re: Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 09:35
von Sirius3
@T1bbY: wer denkt, Du arbeitest mit GET? Hast Du irgendwelche kaputten Proxies, Weiterleitungen oder Server? Was steht denn in $_SERVER?

Re: Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 09:42
von T1bbY
Naja mein PHP Code fängt ja sowohl POST als auch GET ab und wenn ich jetzt bei beiden ein echo mit reinpacke um zu sehen welches der Server wählt bekomme ich ein GET als Antwort.

Code: Alles auswählen

if (strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') == 0)
{
    $jsondata = file_get_contents('php://input');
        echo "post";
        echo $jsondata;

} else {
    $jsondata = $_REQUEST['q'];
        echo "get";
        echo $jsondata;
}

Re: Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 09:52
von Sirius3
@T1bbY: OK, PHP bekommt die falschen Daten. Aber wer ist schuld daran? Hast Du irgendwelche kaputten Proxies, Weiterleitungen oder Server dazwischen, die das verursachen könnten? Was steht denn in $_SERVER?

Re: Requests sendet keinen POST

Verfasst: Freitag 6. November 2015, 10:04
von T1bbY
Nein nichts der gleichen Client und Server hängen im selben Netz

Das bekommt der Server nun.
Also Post funktioniert das Problem liegt jetzt noch in der Verarbeitung in PHP.
500
{'Date': 'Fri, 06 Nov 2015 09:02:26 GMT', 'Content-Length': '211', 'Content-Type': 'text/html; charset=UTF-8', 'Connection': 'close', 'Server': 'Apache/2.4.10 (Debian)'}
POST{"s": {"b1": "1,2", "b2": "1,2", "t8": "1,2", "t9": "1,2", "t6": "1,2", "t7": "1,2", "t4": "1,2", "t5": "1,2", "t2": "1,2", "t3": "1,2", "t1": "1,2", "1": "140536", "t10": "1,2", "t11": "1,2", "t12": "1,2"}}