Как мне получить тело запроса? - PullRequest
1 голос
/ 29 сентября 2011

Я пытаюсь реализовать простой сервер JSON-RPC. Клиентская часть обрабатывается jquery.jsonrpc. Кажется, это работает нормально, отправляя сообщение JSON-RPC в качестве полезного сообщения сообщения.

Мой «сервер» JSON-RPC в настоящее время просто хочет отобразить данные, чтобы я мог видеть результат в HTTP-ответе FireBug.

Код такой:

<?php
class jsonrpc {
    var $requestData;

    function jsonrpc() {
        if (isset($_SERVER["REQUEST_URI"]) && isset($_SERVER["REQUEST_METHOD"])) {
            if (isset($_SERVER["CONTENT_LENGTH"]) && $_SERVER["CONTENT_LENGTH"] > 0) {
                $this->requestData = "";
                $httpContent = fopen("php://input", "r");
                echo "httpcontent=".$httpContent;
                while ($data = fread($httpContent, 1024)) {
                    $this->requestData .= $data;
                }
                fclose($httpContent);
            }
        }
        echo "jsonrpc::jsonrpc()\n";
    }
}
?>

А на вкладке Ответ отображается:

POST http://api.localhost/index.php?tm=1317246797964    200 OK      6ms 

 <br />
<b>Warning</b>:  fopen("php://input", "r") - No error in <b>C:\Develop\ZeroSumGames\api\htdocs\rpc.php</b> on line <b>9</b><br />
httpcontent=<br />
<b>Warning</b>:  fread(): supplied argument is not a valid File-Handle resource in <b>C:\Develop\ZeroSumGames\api\htdocs\rpc.php</b> on line <b>11</b><br />
<br />
<b>Warning</b>:  fclose(): supplied argument is not a valid File-Handle resource in <b>C:\Develop\ZeroSumGames\api\htdocs\rpc.php</b> on line <b>14</b><br />
jsonrpc::jsonrpc()

Object { error="Internal server error", version="2.0"}

Я вижу, что там есть данные, потому что на вкладке заголовков запросов FireBug я вижу это:

Host    api.localhost
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept  application/json, text/javascript, */*
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Content-Type    application/json; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://api.localhost/index.html
Content-Length  72

А также я могу видеть это на вкладке сообщения:

{"jsonrpc":"2.0","method":"example.method.name","id":1,"params":[1,2,3]}

Мой сервер слишком стар для file_get_contents (4.2.2), но функции замены, которые я обнаружил внутри сети, выполняют те же функции, что я написал выше (более или менее), а также имеют проблему с открытием php://input.

Так что мой вопрос , почему я не могу открыть php: // input для чтения?

1 Ответ

2 голосов
/ 06 октября 2011

Я обновил свою локальную машину до 4.4.2, и она работает нормально, так что я думаю, что это ошибка в 4.2.2. Не совсем то исправление, на которое я надеялся.

...