2012-08-11 15 views
5

Ho un piccolo problema qui, come posso dire cURL specificamente per allegare un file a una richiesta?Utilizzo di cURL per caricare un file senza simbolo @?

Se sto caricando un file con curl, allora il metodo comune è quello di attaccarlo come parte di array di dati POST con il valore avendo @ di fronte ad essa, ad esempio:

CURLOPT_POSTFIELDS=>array('my-file'=>'@my-file.txt') 

Questo sarebbe ovviamente lavoro, ma ho due problemi:

  • Cosa succede se non si tratta in realtà di un file che sto caricando? Cosa succede se il mio valore POST in realtà È '@ my-file.txt' e tenta invece di caricare il file? Crea una scappatoia che sto cercando disperatamente di evitare.
  • Come faccio a caricare un file da un URL? Dovrei scaricarlo, memorizzarlo nella cartella temporanea e quindi collegarlo con @ da quella cartella temporanea? Perché non posso fornire a cURL solo i contenuti che desidero utilizzare come file?

CURL CURLOPT_INFILE non è un'opzione, poiché non verrà visualizzata come parte dell'array $ _FILES.

sembra che una tale scappatoia in cURL essere dipendente @ simbolo nel valore del campo POST. C'è un modo per aggirarlo? Perché non c'è un array CURLOPT_FILEFIELDS? La riga di comando cURL ha un flag separato per questo (-F), ma per qualche motivo non lo vedo come un'opzione in PHP.

Qualsiasi aiuto sarebbe molto apprezzato, grazie!

+1

Re la scappatoia, questo sembra essere irreparabili: https://bugs.php.net/bug.php?id=46439 dovrete controllare manualmente fro la presenza di valori di input @ '' durante il controllo. –

+0

Forse [ 'http_build_query'] (http://php.net/http_build_query), come in [questa risposta] (http://stackoverflow.com/a/648296/773625)? – mAu

+0

Grazie a Pekka, vorrei solo che ci fosse una soluzione. Ma mAu: questo non funziona, dal momento che la mia API dovrebbe supportare anche i caricamenti di file. Tutto andrebbe bene se fosse possibile inviare file separatamente dai campi POST e ho bisogno di inviare alcuni dati anche nel POST (dal momento che ci sono dei limiti a GET che non ci sono per il POST). – kingmaple

risposta

1

Quello che ho dovuto fare è rilevare se uno qualsiasi dei dati di input è iniziato con un simbolo @ e se lo hanno fatto, quindi inviarli come variabile GET (come parte dell'URL di invio in cURL). Non aiuta in tutti i casi (come quando viene inviata una stringa di grandi dimensioni che inizia con un @), ma elimina i problemi che avevo con gli handle di Twitter.

Problemi correlati