代码之家  ›  专栏  ›  技术社区  ›  Jason

将php-put-http请求转换为coldfusion

  •  5
  • Jason  · 技术社区  · 14 年前

    这个代码在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中复制它。

    3 回复  |  直到 14 年前
        1
  •  0
  •   zarko.susnjar    14 年前

    这里是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 SouthTo并在CF.翻译

    编辑:

    有关解决方案,请参阅下面的注释。

        2
  •  1
  •   Terry Ryan    14 年前

    我会尝试将method=“put”添加到您的cfhttp调用中。这将使cfhttp发送正确的http动词(在本例中是这样)。

        3
  •  0
  •   stldoug    14 年前

    假设您正在执行Put方法,则可以使用coldFusion的gethttpRequestData()函数来获取xhr数据。

    然后,您可以这样做来保存它:

    <cfset xhr_data = GetHttpRequestData() />
    <cffile action="write" file="PATH/FILENAME" output="#xhr_data.content#">