【问题标题】:How can I send XML (epp) request and then receive data? (PHP)如何发送 XML (epp) 请求然后接收数据? (PHP)
【发布时间】:2020-06-29 20:23:13
【问题描述】:

找了半天代码,现在决定写到这里。

首次登录:

<epp xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<login>
<clID>ClientX</clID>
<pw>epp123</pw>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<svcs>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
<svcExtension>
<extURI>http://test/epp/xml/schema/contact-ext-1.0</extURI>
</svcExtension>
</svcs>
</login>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

然后: 一些 XML

然后退出:

<epp xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<logout />
<clTRID>ABC-12345</clTRID>
</command>
</epp>

如何发送这些数据,然后从服务器接收数据? 谁能给我发个例子?

谢谢

【问题讨论】:

    标签: php xml epp


    【解决方案1】:

    如何发送这些数据,然后从服务器接收数据?

    多次阅读RFC 5734 "Extensible Provisioning Protocol (EPP) Transport over TCP",非常仔细。

    当然,要真正理解它,您需要阅读有关 EPP 的所有 RFC,即 RFC 5730 到 5733,然后如果您认真考虑成为注册商,则需要阅读 RGP 和 secDNS- 1.1 用于几乎无处不在的 2 个主要扩展。然后当然是注册特定的扩展(我相信你正在尝试连接到 EURid 或 DNSBelgium)。

    简而言之:

    • 为注册 EPP 服务器打开一个 TLS 套接字,通常在端口 700 上
    • 正确执行加密:验证服务器证书!
    • 开始读取,因为服务器首先说话,&lt;greeting&gt;
    • 从那里提取 objURIextURI 以正确构建您的 &lt;login&gt;(检查注册表文档,了解哪些扩展是强制性的)
    • 发送您的&lt;login&gt; 框架
    • 检查返回码,然后执行所有其他命令/响应。

    确保从 RFC 5734 了解每个 EPP 帧必须以 4 个八位字节为前缀,编码帧的长度:在输入时(来自注册表),这让您知道您正在获取多少数据,在输出时您必须正确生成它,否则注册表不会读取您的响应。

    如果您刚进入注册商领域,从头开始构建合适的 EPP 客户端可能不是最理想的工作,我不一定建议您这样做。有很多小细节需要正确处理,特别是如果您计划连接到不同的注册表。

    如果您在此处搜索EPP 标签,您可以轻松找到其他问题以及对您有帮助的答案:

    您还可以发现 PHP 库的存在是为了执行 EPP,因此这可能会为您节省一些时间(并使您在理解该库并将其适应您自己的生态系统方面有所松懈)。例如,请参阅 centralnic PHP EPP library - login frame 获取潜在客户信息。

    PS:我参与了 EPP 规范,在过去 20 年左右的时间里编写了多个 EPP 客户端和服务器。

    【讨论】:

      【解决方案2】:

      首先,您需要检查服务器 API 预期如何接收此数据。到目前为止,我们知道它需要 XML,但是如何传递 XML?你应该问的问题:

      • 我尝试与之交互的 API 类型是什么?
      • 它是 XML-RPC 吗?肥皂?也许是 REST API?
      • 它是自定义 API 吗?
      • 什么是 API 端点?
      • 此 API 有手册吗?

      大多数 Web API 的底层传输机制是通过 HTTP 请求。为此,您可以使用像 cURL 这样的 PHP 原生库或像 Guzzle 这样的 PHP 库。如果您正在处理 REST API,Guzzle 是一个不错的选择。

      但如果您正在处理 SOAP API,您也可以找到更具体的库,例如 SOAP client

      更新

      我刚刚意识到 EPP 是协议。如果此链接有帮助,请告诉我,它使用 cURL:

      https://doc.openprovider.eu/Example_Script_EPP_PHP

      【讨论】:

      • EPP 在 RFC 5730 及更高版本中定义。它通常是基于 TLS 的 XML。 RFC 5730 到 5734 为您在回答中提出的所有问题提供了答案 :-) 或者查看我更长的回复。
      • 不,EPP 不“使用 cURL”。这是无效的。 EPP 是基于 TLS 的 XML。理论上,任何 TLS 客户端至少可以在传输级别上执行 EPP。 curl 主要是一个进行 HTTP 调用的工具/库,但可以用于其他协议,包括裸 TLS。但不要混淆工具和协议或其规范。
      • @PatrickMevzek 这就是我的意思,我粘贴的示例使用 cURL 库与服务器通信。
      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多