PHP запрос на получение JSON - PullRequest
1 голос
/ 11 июня 2010

Я пытаюсь написать некоторый простой php-код, который будет отправлять запрос и затем получать результат JSON с сервера.Мне это показалось простым, но приведенный ниже код просто не открывает соединение.

$port = 2057;
$path = "/validate/";
$request = "value1=somevalue&value2=somevalue&value3=somevalue";

$http_request  = "POST $path HTTP/1.0\r\n";
$http_request .= "Host: $server\r\n";
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
$http_request .= "Content-Length: " . strlen($request) . "\r\n";
$http_request .= "\r\n";
$http_request .= $request;

$response = '';

if( false == ( $fs = @fsockopen($server, $port) ) ) {
            die ('Could not open socket');
}

fwrite($fs, $http_request);

while ( !feof($fs) )
{
    $response .= fgets($fs, 1160);
}

fclose($fs);

Кроме того, я попробовал более простой подход с:

$handle = fopen('http://localhost:2057/validate/?'.$request, "r");

или

$response = file_get_contents('http://localhost:2057/validate/' . $request);

, но оба эти подхода просто перестали работать.

Я пытаюсь подключиться к серверу разработки, на котором я работаю в Visual Studio, поэтому я не уверен, имеет ли это какое-либо отношение к проблемам тайм-аута / соединения.

Открыть длялюбые предложения здесь, если они встроены в PHP.

Ответы [ 3 ]

2 голосов
/ 11 июня 2010

Существует множество обработчиков HTTP на чистом PHP, которые могут работать лучше для вас.

Попробуйте PEAR's HTTP_Client или Zend_Http_Client , оба из которых вы можетепросто поставьте в комплекте с вашим приложением.

Если вы не можете писать самостоятельно, попробуйте поработать с streams .Существует полный набор параметров потока HTTP на выбор.

2 голосов
/ 11 июня 2010

Попробуйте использовать HTTP_Request2 ;он не в стандартном PHP, но вы можете распространять его вместе с вашим приложением, чтобы вам не приходилось беспокоиться о том, установлено оно или нет.

Ниже приведен фрагмент из класса, который я использую для отправки документасервер конвертации;Вы можете публиковать что угодно и получать результаты аналогичным образом.

$request = new HTTP_Request2('http://whereveryouwant:80/foo/');
$request->setMethod(HTTP_Request2::METHOD_POST)
    ->setConfig('timeout', CONVERT_SERVER_TIMEOUT)
    ->setHeader('Content-Type', 'multipart/form-data')
    ->addPostParameter('outputFormat', $outputType);
$request->addUpload('inputDocument', $inputFile);
$result = $request->send();
if ($result->getStatus() == 200) {
    return $result->getBody();
} else {
    return false;
}
0 голосов
/ 11 июня 2010

Может быть проще написать это, используя расширение http: http://fr.php.net/manual/en/function.http-post-data.php

...