将VBS脚本转换为PHP


Convert a VBS script to PHP

我从一家与我打交道的公司得到了一段示例代码,介绍如何将XML数据发布到URL,然后读取响应。不幸的是,我在VBS中没有很好的工作知识:

这是我感兴趣的代码部分

set oHTTP = CreateObject("Microsoft.XMLHTTP")
oHTTP.open "POST", "http://www.ophub.net/opxml/response.asp", false,00092,QW 'file url - with dealers Account number, Password
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oHTTP.setRequestHeader "Content-Length", Len(sRequest)
oHTTP.send oXML

根据我在PHP中对这一点的理解,这可以用cUrl来完成,我从网上读到的一些信息中得出了以下内容,但这不起作用,我不知道为什么。

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: application/x-www-form- urlencoded"));
curl_setopt($ch, CURLOPT_URL, "http://www.ophub.net/opxml/response.asp");
curl_setopt($ch, CURLOPT_USERPWD, "00092:QW");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "XML=" . $xml);
$content=curl_exec($ch);
echo $content;

我确信我离我需要的东西不远了,但我似乎无法到达那里,所以任何人都会非常感激。

在您的帖子字段中只需设置xml,无需设置xml=

curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

您还需要退货转移真正的

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

在我看来,这正是您所需要的。这似乎是一个精确的翻译。

我能看到的仅有两个潜在问题是:

  • 您的PHP代码似乎在Content-Type头值中间有一个空格,这很可能会破坏一切
  • 如果您还没有这样做,那么在将$xml数据作为application/x-www-form-urlencoded消息的一部分发送之前,您需要对其进行URL编码(线索在类型名称中:-P),这可以使用urlencode()来完成

将主体数据构建为字符串并进行回显可能是一个好主意,以确保数据是正确的:

echo 'XML=' . urlencode($xml);

因为在application/x-www-form-urlencoded中封装XML消息是一种糟糕的做法。但我遇到过不止一个API可以做到这一点,所以我假设您的代码在这方面对于您尝试使用的API是正确的。