1

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

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

我在 hostbill 插件中使用下面的代码。

 /** 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);
4

1 回答 1

1

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

  1. 数据单元格式

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

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

于 2017-12-26T18:24:03.920 回答