将PHP PUT HTTP请求翻译为ColdFusion
此代码在ColdFusion中的外观如何?将PHP PUT HTTP请求翻译为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的。
这里的Java火花(从Java文档),你需要去解决它:
PutMethod put = new PutMethod("http://jakarta.apache.org");
put.setRequestBody(new FileInputStream("UploadMe.gif"));
翻译在CF这样的:
<cfset myPut = createObject("java", "org.apache.commons.httpclient.methods.PutMethod") />
<cfset myPut.init("http://example.com") />
<cfset myInputStream = createObject("java", "java.io.FileInputStream") />
<cfset myInputStream.init("myxml.xml") />
<cfset myPut.setRequestBody(myInputStream) />
等等......
在链接我上面贴上你可以看到服用点是这样的:
URL url = new URL("http://www.example.com/resource");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(
httpCon.getOutputStream());
out.write("Resource content");
out.close();
找到工作Java soution并在CF中翻译它。
编辑:
请参阅下面的注释以获得解决方案。
是否存在您认为的纯CFML解决方案? – Henry 2010-08-10 04:25:42
下面介绍如何在谷歌cfrest做组:http://cfrest.googlegroups.com/web/apiUtilities.cfc?gda=GD5yz0IAAABIZNuY_A2GQeIp6iDWbK7VaStTUa30d_821IbfLDQgDohJfanwNHy4DV68OGE7zINV4u3aa4iAIyYQIqbG9naPgh6o8ccLBvP6Chud5KMzIQ – 2010-08-10 06:33:47
这里是如何“连接”文件CFHTTP http://www.bennadel.com/blog /619-Throwing-And-Catching-A-File-Using-CFHttp-For-Both-Actions.htm – 2010-08-10 06:35:53
我会尝试在你的cfhttp调用中添加method =“put”。这将使CFHTTP发送正确的http动词(在这种情况下是PUT)。
假设您正在执行PUT方法,您可以使用ColdFusion的GetHttpRequestData()函数来获取XHR数据。
然后,您可以节省出来做这样的事情:
<cfset xhr_data = GetHttpRequestData() />
<cffile action="write" file="PATH/FILENAME" output="#xhr_data.content#">
我不是PHP的大师无论是。但我的猜测是它会在请求的“主体”中发送XML。尝试使用cfhttpparam type =“body”并使用#requestXML#作为值。 – Leigh 2010-08-09 20:05:18
在Coldfusion安装中,已经存在Apache http库,请检查它是如何在Java中完成的,这可能是我现在可以想到的最快和最可定制的解决方案。 – 2010-08-09 20:08:27
@Leigh - 我刚刚尝试过,仍然出现错误。如果它有帮助,我得到的错误是:不支持的媒体类型'application/octet-stream' – Jason 2010-08-09 20:10:11