2010-08-09 24 views
5

Che aspetto avrebbe questo codice in ColdFusion?Traduci PHP PUT richiesta HTTP a 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; 
    } 

Ho qualcosa come il seguente, ma non sembra funzionare.

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

Non so abbastanza di PHP per capire come la variabile $ data (che è solo una stringa di dati XML) è sempre messo nella richiesta HTTP e come duplicato che in ColdFusion.

+1

io non sono il guru php sia. Ma suppongo che stia inviando l'XML nel "corpo" della richiesta. Prova a usare cfhttpparam type = "body" e usa # # requestXML come valore. – Leigh

+0

Nell'installazione di Coldfusion c'è già la libreria HTTP di Apache, controlla come potrebbe essere fatto in Java, probabilmente la soluzione più veloce e più personalizzabile che potessi pensare in questo momento. –

+0

@Leigh - Ho appena provato e sto ancora ricevendo un errore. Se è utile, l'errore che sto ottenendo è: Tipo di supporto non supportato 'application/octet-stream' – Jason

risposta

0

Ecco Java scintilla (da Java docs), è necessario lavorare fuori:

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

è tradotto in CF come questo:

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

E così via ...

Nel link che ho incollato sopra puoi vedere qualcosa di simile a questo:

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

Trova lavoro Java soution e tradurlo in CF.

EDIT:

Vedere commenti qui sotto per una soluzione.

+0

c'è una soluzione CFML pura secondo te? – Henry

+2

Ecco come ha fatto in cfrest gruppo Google: http://cfrest.googlegroups.com/web/apiUtilities.cfc?gda=GD5yz0IAAABIZNuY_A2GQeIp6iDWbK7VaStTUa30d_821IbfLDQgDohJfanwNHy4DV68OGE7zINV4u3aa4iAIyYQIqbG9naPgh6o8ccLBvP6Chud5KMzIQ –

+0

Ed ecco come "allegare" file da cfhttp http://www.bennadel.com/blog /619-Throwing-And-Catching-A-File-Using-CFHttp-For-Both-Actions.htm –

1

Vorrei provare ad aggiungere method = "put" alla chiamata cfhttp. Ciò farà sì che CFHTTP invii il verbo http corretto (PUT in questo caso).

0

Supponendo che si stia utilizzando un metodo PUT, è possibile utilizzare la funzione GetHttpRequestData() di ColdFusion per ottenere i dati XHR.

è possibile salvare fuori facendo qualcosa di simile a questo:

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