Я пытаюсь использовать PHP для чтения данных с локального сервера localhost
, но, похоже, от него не возвращаются данные. Вот мой полный сценарий.localhost (в пользовательском порту) возвращает пустые данные после запроса POST
<?php
$address = "localhost";
echo "Attempting to open the socket at ".$address."...\n";
$fp = fsockopen($address, 49801, $errno, $errstr, 10);
echo "Error number is "; echo $errno; echo ".\n";
echo "Error string is ".$errstr.".\n";
echo "Attempt complete.\n";
if ($fp) {
print "Socket in now open.\n";
syslog(LOG_INFO, "socket.php: Reaching the specified address...");
print "Writing requests...\n"; //Hangs for about 1-2 minutes
fwrite($fp, "POST/HTTP/1.0\r\nUser-Agent: PHP XMLRPC 1.0\r\nHost: ".$address."Content-Type: text/xml\r\nContent-Length: ".strlen($payload)."\r\n\r\n");
$msg = "";
while($data = fread($fp, 32768)) {
$msg= $msg.$data;
}
if (strlen($msg) != 0) {
print "Final message: ***".$msg."***\n";
} else {
print "There is no data received from '".$address."'\n";
}
fclose($fp);
} else {
print "Error\n";
}
?>
Вот результат я получаю в терминале:
Attempting to open the socket at localhost...
Error number is 0.
Error string is .
Attempt complete.
Socket in now open.
Writing requests...
There is no data received from 'localhost'
Как упоминалось в приведенном выше сценарии, то вторая последняя строка Writing requests...
висит около 1 или 2 минут, затем пустая строка прилагается.
Я думаю, что это довольно любопытно, потому что этот скрипт хорошо работает на HTTP-порту 80 или на порту SSH 22. У меня ограничен доступ к конфигурации localhost:49801
и, следовательно, я не могу вносить какие-либо изменения в конфигурацию сервера.
Мне было интересно, что-то не так с конфигурацией сервера, так что мне не нужно вырывать волосы еще на один день.
Кстати, я бегу PHP 5.4 на CentOS 7.
Edit
'111' в "Content-Length: 111" представляет собой произвольное число, которое зависит от длины строки полезной нагрузки в.
Спасибо, что вам нужна помощь!
Почему бы не использовать стандартные методы HTTP вместо работы с API-интерфейсами сокетов? – miken32
Кроме того, вы говорите, что HTTP-сервер ожидает 111-байтовый корпус, но затем не отправляет его. – miken32
Хмм, я не уверен, что понимаю, что вы подразумеваете под «API-интерфейсом сокетов», также я забыл упомянуть, что 111 - это просто произвольное число, которое варьируется в зависимости от полезной нагрузки. Я обновлю сообщение. –