¿En qué se diferencian estos dos fragmentos de código al acceder a una API REST?
$result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');y
$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);Ambos producen el mismo resultado, a juzgar por
print_r(json_decode($result))
                    
                        php
                                curl
                                file-get-contents
                                
                    
                    
                        Salvador Dalí
fuente
                
                fuente

cURLes capaz de mucho más quefile_get_contents. Eso debería bastar.Respuestas:
file_get_contents()es un destornillador simple. Excelente para solicitudes GET simples donde el encabezado, el método de solicitud HTTP, el tiempo de espera, el contenedor de cookies, las redirecciones y otras cosas importantes no importan.fopen()con un contexto de flujo o cURL con setopt son ejercicios prácticos con cada bit y opción que se te ocurra.fuente
file_get_contentstambién permite configurar el contexto, lo que significa que puede configurar los campos de encabezado como desee.Además de esto, debido a algunos ataques recientes a sitios web, tuvimos que proteger más nuestros sitios. Al hacerlo, descubrimos que file_get_contents no funcionaba, mientras que curl seguiría funcionando.
No al 100%, pero creo que esta configuración de php.ini puede haber estado bloqueando la solicitud file_get_contents .
De cualquier manera, nuestro código ahora funciona con curl .
fuente
file_get_contentsrequiereallow_url_fopenser sincero.file_get_contents()debido a muchas vulnerabilidades que se sabe que utilizan la función. cURL es la función que la gente debería usar en el código ahora.allow_url_fopenporque lo confunden conallow_url_include.allow_url_fopenyfile_get_contentsestán bien para usar.file_get_contents()Este es un tema antiguo, pero en mi última prueba en una de mis API, cURL es más rápido y más estable. A veces file_get_contents en una solicitud más grande necesita más de 5 segundos cuando cURL solo necesita de 1.4 a 1.9 segundos, lo que es el doble de rápido.
Necesito agregar una nota sobre esto que solo envío GET y recibo contenido JSON. Si configura cURL correctamente, obtendrá una gran respuesta. Simplemente "diga" a cURL lo que necesita enviar y lo que necesita recibir y listo.
En su examen, me gustaría hacer esta configuración:
Esta solicitud devolverá datos en 0.01 segundos como máximo
fuente
file_get_contentsque hice para confirmar algunas llamadas a la API. 0,8 segundos parafile_get_contentsy 0,49 segundos paracurl(3 llamadas API)