Search code examples
phpjsonsocketsfgets

Socket programming: socket_read, fgets cannot get response


I am trying to get a response from a URL using socket programming, but nothing is working correctly. I am using PHP, and I am told by the developer I am working with that I need to open a socket, send a request, and then I should get a JSON response. the $message is the string that needs to be sent in order to receive a response.

This is what I have tried so far...

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

And then I go on to parse the JSON response.

I have also tried,

$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);

But then I get an error stating that socket_read is not the correct resource. Any help would be appreciated.


Solution

  • You need to do some error checking, at least. Maybe this will help:

    $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);
    }