HTTP-запрос Python с данными json не получает ответ php с данными json

Я пытаюсь отправить http-запрос python с некоторыми данными json (я буду использовать эти данные json позже) на сервер. Сервер должен дать ответ с некоторыми данными json (с использованием PHP). К сожалению, ответа нет, хотя код состояния запроса равен 200. Пожалуйста, помогите!

#request.py

import requests
import urllib3
import json
import os
import time
import sys

#http Request
url = 'http://localhost/response.php'
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}

while True:

    postMessage = '{"Info": {"ID": 1, "IP": "192.168.1.1"}}'
    response = requests.post(url, json=postMessage, headers=headers)
    #trying to decode the response
    try:
        decodedresponse = json.loads(response.text) 
        print(decodedresponse)

    except(ValueError, KeyError, TypeError):
        print("some Error")

#always getting the above print statement!

    break
#response.php


<?php

if (!empty($_POST['json'])){
  $data = [ 'a', 'b', 'c' ];  
  header('Content-type:application/json;charset=utf-8');
  echo json_encode($data);

}
 ?>

postMessage = {"Info": {"ID": 1, "IP": "192.168.1.1"}}
Olvin Roght 28.05.2019 13:28

@OlvinRoght все та же проблема

dragon123 28.05.2019 13:29

Потому что вы пытаетесь найти несуществующее поле сообщения json.

Olvin Roght 28.05.2019 13:31
$data = file_get_contents("php://input"); а потом echo json_decode($data);
Olvin Roght 28.05.2019 13:32

@OlvinRoght Я получаю ту же ошибку!

dragon123 28.05.2019 13:49

@OlvinRoght есть еще предложения, пожалуйста. я чуть не сдалась!!!

dragon123 28.05.2019 14:47

Я написал вам свое предложение. Прочитайте все входные данные и расшифруйте json. Это не работает?

Olvin Roght 28.05.2019 14:49

я попробовал это. Это не сработало. похоже, что ввод POST пуст. поэтому, когда я попытался прочитать его внутри оператора if, используя file_get_contents("php://input") , ничего не произошло, иначе оператор был выполнен.

dragon123 28.05.2019 14:55

@OlvinRoght Мне нужны значения ID и IP в более поздних случаях для сбора некоторых данных из базы данных. !!!

dragon123 28.05.2019 15:14

Ты шутишь, что ли? Я предоставил вам решение, вы не можете применить его и жаловаться, что я не сделал всю работу за вас?

Olvin Roght 28.05.2019 15:17
$data = file_get_contents("php://input"); Не получилось. Я уже сказал это. Извините за недопонимание!
dragon123 28.05.2019 15:23

Потому что вы поместили это в утверждение if, которое никогда не будет правдой.

Olvin Roght 28.05.2019 15:30

@OlvinRoght О боже. Спасибо большое. это сработало. Но небольшое изменение. не echo json_decode($data);, а echo json_encode($data);

dragon123 28.05.2019 15:34

Я разместил свой ответ, вы можете выбрать его, если он помог вам решить проблему.

Olvin Roght 28.05.2019 15:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
14
226
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проверьте свою структуру $_POST.

<?php
if (!empty($_POST['Info'])){
   $data = [ 'a', 'b', 'c' ];  
   echo json_encode($data);
 }
 else{
     echo json_encode(ison_decode($_POST, TRUE));
 }

Я сделал ошибку, попробуйте сейчас без json_encode, потому что данные поста - это json, и нам не нужен json_encode.

stefo91 28.05.2019 13:37

приведенный выше код работает. Но я понял, что выполняется только оператор else. !!! не знаю почему

dragon123 28.05.2019 14:16

потому что у вас нет или пусто $_POST['json']... еще раз - проверьте структуру данных вашего сообщения. Я внес изменения в проверку ответов и повторил попытку.

stefo91 28.05.2019 14:18

никоим образом, если оператор не работает. и echo $_POST ничего не делает. поэтому вывод такой же (ошибка JSON). Проблема пуста $_POST['json'] . Попробовал и ваш новый код. Учитывая некоторые данные, например $dataElse = ['a', 'b', 'c']; эхо json_encode ($ dataElse); это сработало

dragon123 28.05.2019 14:29

Я внес изменения, попробуйте сейчас.

stefo91 28.05.2019 14:49

ни за что. это не работает .. большое спасибо за усилия.

dragon123 28.05.2019 15:24
Ответ принят как подходящий

Вы должны удалить кавычки при назначении postMessage в вашем:

postMessage = {"Info": {"ID": 1, "IP": "192.168.1.1"}}

И измените свой php-код на:

<?php
$data = file_get_contents("php://input");
header('Content-type:application/json;charset=utf-8');
echo json_encode($data);
?>

Другие вопросы по теме