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!
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. –
Forse [ 'http_build_query'] (http://php.net/http_build_query), come in [questa risposta] (http://stackoverflow.com/a/648296/773625)? – mAu
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