【发布时间】:2010-08-09 19:41:03
【问题描述】:
这段代码在 ColdFusion 中会是什么样子?
protected function httpPut($url, $params = null, $data = null)
{
$fh = fopen('php://memory', 'rw');
fwrite($fh, $data);
rewind($fh);
$ch = curl_init($url);
$this->addOAuthHeaders($ch, $url, $params['oauth']);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_INFILE, $fh);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = $this->curl->addCurl($ch);
fclose($fh);
return $resp;
}
我有类似以下的东西,但它似乎不起作用。
<cffile action="write" file="d:\my\directory\path\test.xml" output="#arguments.requestXML#">
<cfhttp url="#oaAccessTokenURL#" method="#arguments.requestType#" charset="UTF-8">
<cfheader name="Authorization" value="#oauthheader#">
<cfhttpparam type="file" name="Course" file="d:\my\directory\path\test.xml">
</cfhttp>
我对 PHP 的了解还不够,无法理解 $data 变量(它只是一串 XML 数据)如何被放入 http 请求以及如何在 ColdFusion 中复制它。
【问题讨论】:
-
我也不是 php 大师。但我的猜测是它在请求的“正文”中发送 XML。尝试使用 cfhttpparam type="body" 并使用 #requestXML# 作为值。
-
在 Coldfusion 安装中已经有 Apache http 库,检查它如何在 Java 中完成,这可能是我现在能想到的最快和最可定制的解决方案。
-
@Leigh - 我刚刚尝试过,但仍然出现错误。如果有帮助,我得到的错误是:不支持的媒体类型'application/octet-stream'
-
@Jason - 接收端的预期内容类型是什么(文本/xml)?听起来您可能需要在 cfhttp 调用中添加内容类型标头。
-
@Jason - 您可能只是缺少一些参数或标题。如果你真的不能让它与 CF 一起工作,那么按照@zarko 的建议尝试 java。如果可行,我将使用 Live http 标头之类的内容查看成功请求的标头。然后尝试使用 cfhttp 复制它。 (我喜欢 java,但只有当我无法使用 vanilla CF 时才尝试使用它)
标签: php xml coldfusion http-request