PHP套接字fread响应需要永远

时间:2017-07-26 15:41:13

标签: php sockets tcp provisioning epp

我想通过EPP protocole向注册商发送XML请求并获得响应,连接成功,但是当我到达fread($fp)时,需要永远加载。

有没有办法让它快速并得到注册商的回复?

我在主机插件中使用了以下代码。

 /** open socket* */
        $fp = fsockopen("tcp://registrarwebsite.com", 700, $errno, $errstr, 200);

        stream_set_blocking($fp, true);

        stream_context_set_option($fp, 'ssl', 'verify_host', true);
        stream_context_set_option($fp, 'ssl', 'verify_peer', true);
        stream_context_set_option($fp, 'ssl', 'allow_self_signed', false);
        stream_context_set_option($fp, 'ssl', 'local_cert', __DIR__ . '/ma_cert.pem');
        stream_context_set_option($fp, 'ssl', 'local_pk', __DIR__ . '/ma_key.pem');


        // $secure = stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
        // stream_set_blocking($fp, false);

        if (!$fp) {
            $this->addError('Il y a une erreur dans la connexion: ' . $errno . ' ' . $errstr);
            return false;
        } else {

            $xml = htmlentities($this->prepareXMLRequest($xml));

            fwrite($fp, $xml);

            $out = fread($fp, 1024);

            fclose($fp);

            $out1 = htmlentities($fp);

            $this->addError('<span style="color: green !important">Connexion se fait avec succes, le code retourné est : </span> ' . $out1);

1 个答案:

答案 0 :(得分:1)

您的EPP实施是错误的(如果服务器支持标准信道),请参阅我引用的RFC5734

  
      
  1. 数据单元格式

         

    EPP数据单元包含两个字段:描述的32位标头   数据单元的总长度和EPP XML实例。该   通过减去四个来确定EPP XML实例的长度   八位字节来自数据单元的总长度。接收器必须   成功读取了许多八位字节以检索完整的EPP XML   处理EPP消息之前的实例。

  2.   

另请注意,第3节显示当您打开TCP / TLS连接时,第一方要说的是具有<greeting>的服务器,因此您首先需要阅读该客户端,然后发送您的登录信息。