1

我需要将以下 fsocketopen 代码转换为 curl 以便我可以使用客户端 SSL 证书。目前 SSL 已关闭,因此我可以让 curl 工作。这是当前代码稍作修改,因为它是一个安全站点。

$fp = fsockopen("tcp://XX.XXX.XXX.XX", 5025, $errno, $errstr, 4); 
    if (!$fp) 
    { 
        echo "$errstr ($errno)<br />\n"; 
    } 
    else 
    {

            $out = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>";
           $out .= "<LoginRequest>";
           $out .= "<UserId>". $userID . "</UserId>";
           $out .= "</LoginRequest>";

           $myout = chr(strlen($out)/256);
           $myout .= chr(strlen($out)%256);
           $myout .= $out;

            fwrite($fp, $myout);
            stream_set_timeout($fp,15);

            $in = fread($fp, 11024);

此代码确实有效,但如果不是使用 fread 和我使用的值

while (feof($fp)) {
    echo fgets($fp, 256);
}

它不起作用,因为服务器从不发送文件结尾,并且从不关闭连接(直到 3 分钟过去)

我尝试使用以下卷曲,但它只是挂在那里。

$url = "XXX.XX.XXX.XXX";
    $port = 5025;

    $out = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>";
   $out .= "<LoginRequest>";
   $out .= "<UserId>". $userID . "</UserId>";
   $out .= "</LoginRequest>";

   $myout = chr(strlen($out)/256);
   $myout .= chr(strlen($out)%256);
   $myout .= $out;

    // more details at http://php.net/curl
    $ch = curl_init();
    //curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_PORT, $port);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, $myout);
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $myout);

    // fetch response and close the socket
    $response = curl_exec($ch);

    echo '<pre>', curl_error($ch) . "\n";

    curl_close($ch);



    echo "response 3 =" . $response;

我得到的错误是操作在 30000 毫秒后超时,收到 0 个字节enter code here

有任何想法吗?

4

0 回答 0