Что не так с моим запросом на завивки PHP, пожалуйста, помогите .. Я не получаю никаких данных назад

Он говорит, что браузер отправил запрос, который сервер не мог понять. Я не совсем понимаю, что пошло не так в моем PHP-коде. Может кто-то, пожалуйста, помогите мне понять, где я ошибся. Благодаря !

<?php $url ="http://127.0.0.1/sensor/sens/data.php"; $xml_data = file_get_contents("/usr/local/www/data/data.xml"); $header ="POST HTTP/1.0 \r\n"; $header .="Content-type: text/xml \r\n"; $header .="Content-length: ".strlen($xml_data)." \r\n"; $header .="Content-transfer-encoding: text\r\n"; $header .="Connection: close \r\n\r\n"; $header .= $xml_data; $ch = curl_init(); curl_setopt ($ch,CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$header); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); $data = curl_exec($ch); // if the post is successful , the server will return some data. echo $data; #$info = curl_getinfo($ch); # #if(!curl_errno($ch)) # echo 'It took '.$info['total_time'].'seconds to send a request to'.$info['url']; # # else # curl_close($ch); echo $data; ?> 

Я думаю, проблема CURLOPT_POSTFIELDS с CURLOPT_POSTFIELDS

Из руководства PHP …

Полные данные для отправки в HTTP-режиме «POST». Чтобы опубликовать файл, добавьте имя файла с помощью @ и используйте полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка с urlencoded, например 'para1 = val1 & para2 = val2 & …', или как массив с именем поля в качестве ключа и данными поля в качестве значения. Если значением является массив, заголовок Content-Type будет установлен в multipart / form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются этому параметру с префиксом @.

http://php.net/manual/en/function.curl-setopt.php

Он должен содержать только полезную нагрузку, а не весь заголовок.

Вам не нужно создавать пользовательский запрос, используя cURL для выполнения этого запроса, достаточно обычного HTTP POST. Другая часть проблемы заключается в том, что вы также устанавливаете POSTFIELDS и пользовательский запрос на ту же самую вещь, которая была POSTFIELDS HTTP-запросом, поэтому весь запрос состоит в основном из двух повторяющихся строк.

Попробуйте этот код и изучите его, чтобы понять, как он работает:

 <?php $url = "http://127.0.0.1/sensor/sens/data.php"; $xml_data = file_get_contents("/usr/local/www/data/data.xml"); $headers = array('Content-Type: text/xml', 'Content-Transfer-Encoding: text', 'Connection: close'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); $data = curl_exec($ch); // if the post is successful , the server will return // some data. echo $data; // info = curl_getinfo($ch); // // f(!curl_errno($ch)) // echo 'It took '.$info['total_time'].'seconds to send a request // to'.$info['url']; // // else // curl_close($ch); echo $data;