通过已经打开的套接字卷曲

通过已经打开的套接字卷曲

问题描述:

我不知道有没有办法使用 curl trhough已经打开的套接字,类似,适应这:

I wonder if there's a way to use curl trhough an already open socket, something like, adapting this:

<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>

使用 curl_exec() code> fgets($ fp,128)

to use curl_exec() instead of fgets($fp, 128)

(或任何其他方式使用 curl ),所有的时间,我的目标是阅读twitter流api)

(or, any other way to use curl() over the same stream all the time, my goal is to read the twitter stream api)

谢谢

这可能适用于你,因为你正在处理Twitter Stream API

This might work for you since you are dealing with Twitter Stream API

set_time_limit(0);
$ch = curl_init();
echo "<pre>";
curl_setopt($ch, CURLOPT_URL, "https://sitestream.twitter.com/2b/site.json");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'cgets');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_USERPWD, 'user:password');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 1000000);
curl_exec($ch);

function cgets($ch, $string) {
    $length = strlen($string);
    printf("Received %d byte\n", $length);
    flush();
    return $length;
}