套接字编程:socket_read,fgets无法获得响应

时间:2014-10-02 00:53:25

标签: php json sockets fgets

我正在尝试使用套接字编程从URL获取响应,但没有任何工作正常。我正在使用PHP,我正在使用的开发人员告诉我,我需要打开一个套接字,发送一个请求,然后我应该得到一个JSON响应。 $message是需要发送以接收响应的字符串。

这是我到目前为止所尝试的......

$message = "api\tjson\tget\trooms\n";
$response = fsockopen("142.4.xxx.xxx", 5678);
fputs($response, $message);
fgets($response, 2048);
$data = json_decode($response, true);

然后我继续解析JSON响应。

我也试过了,

$message = "api\tjson\tget\trooms\n";
$response = fsockopen("142.4.xxx.xxx", 5678);
fputs($response, $message);
socket_read($response, 2048, PHP_NORMAL_READ);
$data = json_decode($response, true);

但后来我收到一条错误,指出socket_read不是正确的资源。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

至少需要做一些错误检查。也许这会有所帮助:

$message = "api\tjson\tget\trooms\n";
$response = fsockopen("142.4.xxx.xxx", 5678, $errno, $errstr, 30);
if (!$response) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "POST /script.php HTTP/1.1\r\n";
    $out .= "Host: www.webste.com\r\n";
    $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out .= 'Content-Length: ' . strlen($message) . "\r\n\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($response, $out);
    fwrite($response, $message);
    while (!feof($response)) {
        echo fgets($response, 128);
    }
    fclose($response);
}