我想通过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);
答案 0 :(得分:1)
您的EPP实施是错误的(如果服务器支持标准信道),请参阅我引用的RFC5734:
- 醇>
数据单元格式
EPP数据单元包含两个字段:描述的32位标头 数据单元的总长度和EPP XML实例。该 通过减去四个来确定EPP XML实例的长度 八位字节来自数据单元的总长度。接收器必须 成功读取了许多八位字节以检索完整的EPP XML 处理EPP消息之前的实例。
另请注意,第3节显示当您打开TCP / TLS连接时,第一方要说的是具有<greeting>
的服务器,因此您首先需要阅读该客户端,然后发送您的登录信息。