¿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
cURL
es 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_contents
tambié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_contents
requiereallow_url_fopen
ser 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_fopen
porque lo confunden conallow_url_include
.allow_url_fopen
yfile_get_contents
está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_contents
que hice para confirmar algunas llamadas a la API. 0,8 segundos parafile_get_contents
y 0,49 segundos paracurl
(3 llamadas API)