Tengo un pequeño problema aquí, ¿cómo puedo decirle específicamente a cURL que adjunte un archivo a una solicitud?¿Utiliza cURL para subir un archivo sin el símbolo @?
Si yo estoy cargando un archivo con doblez, entonces el método común es para adjuntarlo como parte de la matriz de datos POST con el valor que tiene @ delante de él, por ejemplo:
CURLOPT_POSTFIELDS=>array('my-file'=>'@my-file.txt')
Esto, obviamente, trabajo, pero tengo dos problemas con él:
- ¿Qué pasa si no es realmente un archivo que estoy cargando? ¿Qué pasa si mi valor POST en realidad ES '@ my-file.txt' e intenta cargar el archivo en su lugar? Crea una laguna que estoy tratando desesperadamente de evitar.
- ¿Cómo puedo cargar un archivo desde una URL? ¿Tendría que descargarlo, almacenarlo en una carpeta temporal y luego adjuntarlo con @ desde esa carpeta temporal? ¿Por qué no puedo dar CURL solo a los contenidos que deseo utilizar como archivo?
cURL CURLOPT_INFILE no es una opción, ya que no aparecerá como parte de la matriz $ _FILES.
Parece que una laguna en cURL depende del símbolo @ en el valor del campo POST. ¿Hay alguna forma de evitarlo? ¿Por qué no hay una matriz CURLOPT_FILEFIELDS? La línea de comandos cURL tiene una bandera separada para esto (-F), pero por alguna razón no la veo como una opción en PHP.
¡Cualquier ayuda sería muy apreciada, gracias!
En cuanto a la laguna, esto parece no ser corregido: https://bugs.php.net/bug.php?id=46439 tendrá que verificar manualmente la presencia de '@' al verificar los valores de entrada. –
Tal vez ['http_build_query'] (http://php.net/http_build_query), como en [esta respuesta] (http://stackoverflow.com/a/648296/773625)? – mAu
Gracias Pekka, solo desearía que hubiera una solución. Pero mAu: Esto no funciona, ya que mi API necesitaría soportar cargas de archivos también. Todo estaría bien si fuera posible enviar archivos por separado de los campos de POST y también tengo que enviar algunos datos en POST (ya que hay límites para GET que no están ahí para el POST). – kingmaple