Я пытаюсь отправить 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);
}
?>
@OlvinRoght все та же проблема
Потому что вы пытаетесь найти несуществующее поле сообщения json
.
$data = file_get_contents("php://input");
а потом echo json_decode($data);
@OlvinRoght Я получаю ту же ошибку!
@OlvinRoght есть еще предложения, пожалуйста. я чуть не сдалась!!!
Я написал вам свое предложение. Прочитайте все входные данные и расшифруйте json. Это не работает?
я попробовал это. Это не сработало. похоже, что ввод POST пуст. поэтому, когда я попытался прочитать его внутри оператора if, используя file_get_contents("php://input") , ничего не произошло, иначе оператор был выполнен.
@OlvinRoght Мне нужны значения ID и IP в более поздних случаях для сбора некоторых данных из базы данных. !!!
Ты шутишь, что ли? Я предоставил вам решение, вы не можете применить его и жаловаться, что я не сделал всю работу за вас?
$data = file_get_contents("php://input");
Не получилось. Я уже сказал это. Извините за недопонимание!
Потому что вы поместили это в утверждение if, которое никогда не будет правдой.
@OlvinRoght О боже. Спасибо большое. это сработало. Но небольшое изменение. не echo json_decode($data);
, а echo json_encode($data);
Я разместил свой ответ, вы можете выбрать его, если он помог вам решить проблему.
Проверьте свою структуру $_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.
приведенный выше код работает. Но я понял, что выполняется только оператор else. !!! не знаю почему
потому что у вас нет или пусто $_POST['json']... еще раз - проверьте структуру данных вашего сообщения. Я внес изменения в проверку ответов и повторил попытку.
никоим образом, если оператор не работает. и echo $_POST ничего не делает. поэтому вывод такой же (ошибка JSON). Проблема пуста $_POST['json'] . Попробовал и ваш новый код. Учитывая некоторые данные, например $dataElse = ['a', 'b', 'c']; эхо json_encode ($ dataElse); это сработало
Я внес изменения, попробуйте сейчас.
ни за что. это не работает .. большое спасибо за усилия.
Вы должны удалить кавычки при назначении 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);
?>
postMessage = {"Info": {"ID": 1, "IP": "192.168.1.1"}}