Перевести PHP PUT HTTP-запрос в ColdFusion - PullRequest
5 голосов
/ 09 августа 2010

Как будет выглядеть этот код в 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 ]

1 голос
/ 11 августа 2010

Я бы попробовал добавить method = "put" к вашему вызову cfhttp.Это заставит CFHTTP отправлять правильный HTTP-глагол (в данном случае PUT).

0 голосов
/ 29 октября 2010

Предполагая, что вы используете метод PUT, вы можете использовать функцию GetFttpRequestData () ColdFusion, чтобы получить данные XHR.

0 голосов
/ 10 августа 2010

Вот искра 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-решение и переведите его на CF.* См. Комментарии ниже для решения.

...