PHP socket模拟POST请求

<?php
if (! function_exists ( 'socket_post' )) {
        function socket_post($url, $data, $referer = '') {
                if (! is_array ( $data )) {
                        return;
                }
                $data = http_build_query ( $data );
                $url = parse_url ( $url );
                if (empty ( $url ['scheme'] ) || $url ['scheme'] != 'http') {
                        die ( "Error: Only HTTP request are supported !" );
                }
                $host = $url ['host'];
                $path = isset ( $url ['path'] ) ? $url ['path'] : '/';
                // open a socket connection on port 80 - timeout: 30 sec
                $fp = fsockopen ( $host, 80, $errno, $errstr, 30 );
                if ($fp) {
                        // send the request headers:
                        $length = strlen ( $data );
                        $POST = <<<HEADER
POST {$path} HTTP/1.1
Accept: text/plain, text/html
Referer: {$referer}
Accept-Language: zh-CN,zh;q=0.8
Content-Type: application/x-www-form-urlencode
Cookie: token=value; pub_cookietime=2592000; pub_sauth1=value; pub_sauth2=value
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17
Host: {$host}
Content-Length: {$length}
Pragma: no-cache
Cache-Control: no-cache
Connection: close\r\n
{$data}
HEADER;
                        fwrite ( $fp, $POST );
                        $result = '';
                        while ( ! feof ( $fp ) ) {
                                // receive the results of the request
                                $result .= fread ( $fp, 512 );
                        }
                } else {
                        return array (
                                        'status' => 'error',
                                        'error' => "$errstr ($errno)" 
                        );
                }
                
                // close the socket connection:
                fclose ( $fp );
                
                // split the result header from the content
                $result = explode ( "\r\n\r\n", $result, 2 );
                
                // return as structured array:
                return array (
                                'status' => 'ok',
                                'header' => isset ( $result [0] ) ? $result [0] : '',
                                'content' => isset ( $result [1] ) ? $result [1] : '' 
                );
        
}
}
print_r ( socket_post ( 'http://blog.51cto.com/', array (
                'name=' => 'qiufeng',
                'password' => md5 ( 'www.fengdingbo.com' ) 
) ) );
?>