Requests sendet keinen POST

Probleme bei der Installation?
Antworten
T1bbY
User
Beiträge: 12
Registriert: Freitag 6. November 2015, 08:35

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
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@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'];
}
T1bbY
User
Beiträge: 12
Registriert: Freitag 6. November 2015, 08:35

@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. :/
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@T1bbY: wer denkt, Du arbeitest mit GET? Hast Du irgendwelche kaputten Proxies, Weiterleitungen oder Server? Was steht denn in $_SERVER?
T1bbY
User
Beiträge: 12
Registriert: Freitag 6. November 2015, 08:35

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;
}
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@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?
T1bbY
User
Beiträge: 12
Registriert: Freitag 6. November 2015, 08:35

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"}}
Antworten