php - curl_init - file_get_contents curl
PHP cURL vs file_get_contents (3)
¿En qué se diferencian estas dos piezas de código cuando acceden 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))
Además de esto, debido a algunos hackeos de sitios web recientes, tuvimos que proteger nuestros sitios más. Al hacerlo, descubrimos que file_get_contents no funcionaba, donde curl aún funcionaría.
No es 100%, pero creo que esta configuración php.ini puede haber estado bloqueando la solicitud file_get_contents .
; Disable allow_url_fopen for security reasons
allow_url_fopen = 0
De cualquier manera, nuestro código ahora funciona con curl .
Este es un tema viejo, 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 necesita solo de 1,4 a 1,9 segundos, lo que es el doble más rápido.
Necesito agregar una nota sobre esto que acabo de enviar contenido GET y recive JSON. Si configura cURL correctamente, tendrá una gran respuesta. Solo "cuéntanos" para INFORMAR lo que necesitas enviar y lo que necesitas para recibir y eso es todo.
En su examen me gustaría hacer esta configuración:
$ch = curl_init(''http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Accept: application/json''));
$result = curl_exec($ch);
Esta solicitud devolverá datos en 0.01 segundos como máximo
file_get_contents()
es un simple destornillador. Ideal para solicitudes GET simples donde el encabezado, el método de solicitud HTTP, el tiempo de espera, el cookiejar, los redireccionamientos y otras cosas importantes no importan.
fopen()
con un contexto de flujo o cURL con setopt son setopt con cada bit y opción que se te ocurra.