如何只获取php套接字请求的结果?

How to get only the result of php socket request?

我尝试在没有 HTTP header 的情况下从套接字请求中获取结果,但是脚本 return 整个 HTTP header 如下所示:

$api_pause = parse_url('http://server/api.php');            

$requestArray_pause = array('user' => 'someuser', 'pass' => 'somepasse', 'source' => 'PAUSE','function' => 'field_info','field_name' => 'status','user_id'=> $user_id );
    $sock_pause = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    socket_connect($sock_pause, $api_pause['host'], ((isset($api_pause['port'])) ? $api_pause['port'] : 80));
    if (!$sock_pause) {
        throw new Exception('Connexion echouee!');
    }
    $request_pause = '';
    if (!empty($requestArray_pause)) {
        foreach ($requestArray_pause as $k_p => $v_p) {
            if (is_array($v_p)) {
                foreach($v_p as $v2_p) {
                    $request_pause .= urlencode($v_p).'[]='.urlencode($v2_p).'&';
                }
            }
            else {
                $request_pause .= urlencode($k_p).'='.urlencode($v_p).'&';
            }
        }
        $request_pause = substr($request_pause,0,-1);
    }
    $data_pause = "POST ".$api_pause['path'].((!empty($api_pause['query'])) ? '?'.$api_pause['query'] : '')." HTTP/1.0\r\n"
    ."Host: ".$api_pause['host']."\r\n"
    ."Content-type: application/x-www-form-urlencoded\r\n"
    ."User-Agent: PHP\r\n"
    ."Content-length: ".strlen($request_pause)."\r\n"
    ."Connection: close\r\n\r\n"
    .$request_pause."\r\n\r\n";
    socket_send($sock_pause, $data_pause, strlen($data_pause), 0);
    $result_pause = '';
    do {
        $piece_pause = socket_read($sock_pause, 1024);
        $result_pause .= $piece_pause;
    }
    while($piece_pause != '');
    socket_close($sock_pause);
   
   
   echo $result_pause;  

代码的结果是:

HTTP/1.1 200 OK
Date: Wed, 16 Sep 2020 10:51:35 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Content-Length: 1
Connection: close
Content-Type: text/html; charset=utf-8

A

在我的例子中,我只想得到这个例子中的最后一个值“A”,没有 headers 信息。

Socket 将为您提供接收到的任何数据,无论它是什么协议。 因此,您有义务自己处理所有 HTTP headers。

HTTP headers 与 body 由两个换行符(空行)分隔。您可以将两个空行之前的所有数据剪切掉:

   $body = preg_replace('/^.*?\r?\n\r?\n/s', '', $result_pause);

如果您想使用 HTTP 协议进行通信,请考虑使用例如 cURL 而不是普通套接字