2010-08-09 15 views
5

Jaki byłby ten kod w ColdFusion?Przetłumacz PHP PUT żądanie HTTP na 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; 
    } 

Mam coś podobnego, ale wygląda na to, że nie działa.

<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> 

nie wiem wystarczająco dużo o PHP, aby zrozumieć, jak zmienna $ dane (który jest po prostu ciąg danych XML) jest coraz wprowadzone do żądania HTTP i jak powielić że w ColdFusion.

+1

Nie jestem guru albo php. Ale zgaduję, że to jest wysyłanie XML-a w "ciele" żądania. Spróbuj użyć cfhttpparam type = "body" i użyj # requestXML # jako wartości. – Leigh

+0

W instalacji Coldfusion jest już biblioteka http Apache, sprawdź, jak można to zrobić w Javie, prawdopodobnie najszybszym i najbardziej konfigurowalnym rozwiązaniu, jakie mogłem teraz wymyślić. –

+0

@Leigh - Właśnie próbowałem tego i wciąż dostaję błąd. Jeśli to pomaga, otrzymuję błąd: Nieobsługiwany typ mediów "application/octet-stream" – Jason

Odpowiedz

0

Oto iskra Java (Java od docs), trzeba się dogadać:

PutMethod put = new PutMethod("http://jakarta.apache.org"); 
     put.setRequestBody(new FileInputStream("UploadMe.gif")); 

jest tłumaczone w CF tak:

<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) /> 

i tak dalej ...

W łączu wklejonym powyżej możesz zobaczyć coś takiego:

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(); 

Znajdź działający język Java i przetłumacz go w CF.

EDIT:

Zobacz komentarze poniżej rozwiązania.

+0

Czy myślisz o czystym rozwiązaniu CFML? – Henry

+2

Oto jak to zrobić w cfrest grupy dyskusyjne: http://cfrest.googlegroups.com/web/apiUtilities.cfc?gda=GD5yz0IAAABIZNuY_A2GQeIp6iDWbK7VaStTUa30d_821IbfLDQgDohJfanwNHy4DV68OGE7zINV4u3aa4iAIyYQIqbG9naPgh6o8ccLBvP6Chud5KMzIQ –

+0

A oto jak „przyczepić” plik do cfhttp http://www.bennadel.com/blog /619-Throwing-And-Catching-A-File-Using-CFHttp-For-As-Actions.htm –

1

Chciałbym spróbować dodać metodę = "put" do połączenia cfhttp. To spowoduje, że CFHTTP wyśle ​​prawidłowy czasownik http (w tym przypadku: PUT).

0

Zakładając, że wykonujesz metodę PUT, możesz użyć funkcji GetHttpRequestData() ColdFusion, aby uzyskać dane XHR.

można następnie zapisać go robiąc coś takiego:

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