En PHP, veo la palabra cURL en muchos proyectos PHP. ¿Qué es? ¿Como funciona?
Enlace de referencia: cURL
En PHP, veo la palabra cURL en muchos proyectos PHP. ¿Qué es? ¿Como funciona?
Enlace de referencia: cURL
Respuestas:
cURL es una biblioteca que le permite realizar solicitudes HTTP en PHP. Todo lo que necesita saber al respecto (y la mayoría de las otras extensiones) se puede encontrar en el manual de PHP .
Para utilizar las funciones cURL de PHP, debe instalar el paquete »libcurl. PHP requiere que use libcurl 7.0.2-beta o superior. En PHP 4.2.3, necesitará libcurl versión 7.9.0 o superior. Desde PHP 4.3.0, necesitará una versión de libcurl que sea 7.9.8 o superior. PHP 5.0.0 requiere una versión de libcurl 7.10.5 o superior.
También puede realizar solicitudes HTTP sin cURL, aunque es necesario allow_url_fopen
que esté habilitado en su php.ini
archivo.
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
cURL es una forma en que puede presionar una URL de su código para obtener una respuesta html. cURL significa URL del cliente que le permite conectarse con otras URL y usar sus respuestas en su código.
Resumen:
El curl_exec
comando en PHP es un puente para usar curl
desde la consola. curl_exec hace que sea fácil y rápido hacer solicitudes GET / POST, recibir respuestas de otros servidores como JSON y descargar archivos.
Advertencia, peligro:
curl
es malvado y peligroso si se usa incorrectamente porque se trata de obtener datos de Internet. Alguien puede interponerse entre su curl y el otro servidor e inyectar un rm -rf /
en su respuesta, y luego ¿por qué me dejo caer en una consola y ls -l
ya ni siquiera funciona? Porque has subestimado mal el peligroso poder del rizo. No confíes en que todo lo que regresa de curl sea seguro, incluso si estás hablando con tus propios servidores. Podría estar retirando el malware para liberar a los tontos de su riqueza.
Estos se hicieron en Ubuntu 12.10
Curl básico desde la línea de comandos:
el@apollo:/home/el$ curl http://i.imgur.com/4rBHtSm.gif > mycat.gif
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 492k 100 492k 0 0 1077k 0 --:--:-- --:--:-- --:--:-- 1240k
Entonces puedes abrir tu gif en firefox:
firefox mycat.gif
Gatos gloriosos que evolucionan Toxoplasma gondii para hacer que las mujeres mantengan a los gatos cerca y que los hombres también mantengan a las mujeres alrededor.
Ejemplo de cURL obtener solicitud para golpear google.com, eco a la línea de comandos:
Esto se hace a través del terminal phpsh:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
Lo que imprime y arroja un desorden de html y javascript condensado (de google) a la consola.
El ejemplo de cURL coloca el texto de respuesta en una variable:
Esto se hace a través del terminal phpsh:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://i.imgur.com/wtQ6yZR.gif');
php> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
php> $contents = curl_exec($ch);
php> echo $contents;
La variable ahora contiene el binario que es un gif animado de un gato, las posibilidades son infinitas.
Haga un rizo desde un archivo PHP:
Pon este código en un archivo llamado myphp.php:
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'http://www.google.com');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)){
print "Nothing returned from url.<p>";
}
else{
print $buffer;
}
?>
Luego ejecútelo a través de la línea de comandos:
php < myphp.php
Ejecutó myphp.php y ejecutó esos comandos a través del intérprete php y descargó un montón de desordenado html y javascript en la pantalla.
Puede hacer GET
y POST
solicitar con curl, todo lo que debe hacer es especificar los parámetros tal como se definen aquí: Usar curl para automatizar trabajos HTTP
Recordatorio de peligro:
Tenga cuidado al deshacerse de la producción de rizos, si alguno de ellos se interpreta y ejecuta, su caja es propiedad y la información de su tarjeta de crédito se venderá a terceros y obtendrá un misterioso cargo de $ 900 de una compañía de pisos unipersonal de Alabama que es un frente a fraude de tarjetas de crédito en el extranjero.
cURL es una forma en que puede presionar una URL de su código para obtener una respuesta HTML de él. Se utiliza para la línea de comando cURL desde el lenguaje PHP.
<?php
// Step 1
$cSession = curl_init();
// Step 2
curl_setopt($cSession,CURLOPT_URL,"http://www.google.com/search?q=curl");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession,CURLOPT_HEADER, false);
// Step 3
$result=curl_exec($cSession);
// Step 4
curl_close($cSession);
// Step 5
echo $result;
?>
Paso 1: Inicialice una sesión de curl usando curl_init()
.
Paso 2: establece la opción para CURLOPT_URL
. Este valor es la URL a la que enviamos la solicitud. Agregue un término de búsqueda curl
usando el parámetro q=
. Establecer opción para CURLOPT_RETURNTRANSFER
. True le dirá a curl que devuelva la cadena en lugar de imprimirla. Establezca la opción para CURLOPT_HEADER
, falso le dirá a curl que ignore el encabezado en el valor de retorno.
Paso 3: Ejecute la sesión de curl usando curl_exec()
.
Paso 4: cierre la sesión de curl que hemos creado.
Paso 5: genera la cadena de retorno.
public function curlCall($apiurl, $auth, $rflag)
{
$ch = curl_init($apiurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($auth == 'auth') {
curl_setopt($ch, CURLOPT_USERPWD, "passw:passw");
} else {
curl_setopt($ch, CURLOPT_USERPWD, "ss:ss1");
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$dt = curl_exec($ch);
curl_close($ch);
if($rflag != 1) {
$dt = json_decode($dt,true);
}
return $dt;
}
Esto también se usa para la autenticación. También podemos establecer el nombre de usuario y la contraseña para la autenticación.
Para obtener más funcionalidad, consulte el manual del usuario o el siguiente tutorial:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
Primero, comprendamos los conceptos de curl, libcurl y PHP / cURL.
curl : una herramienta de línea de comandos para obtener o enviar archivos mediante la sintaxis de URL.
libcurl : una biblioteca creada por Daniel Stenberg, que le permite conectarse y comunicarse con muchos tipos diferentes de servidores con muchos tipos diferentes de protocolos. libcurl actualmente admite los protocolos http, https, ftp, gopher, telnet, dict, file y ldap. libcurl también admite certificados HTTPS, HTTP POST, HTTP PUT, carga FTP (esto también se puede hacer con la extensión ftp de PHP), carga basada en formularios HTTP, proxies, cookies y autenticación de usuario + contraseña.
PHP / cURL : el módulo para PHP que hace posible que los programas PHP usen libcurl.
Cómo usarlo:
Paso 1 : Inicialice una sesión de curl use curl_init ().
Paso 2 : establece la opción para CURLOPT_URL. Este valor es la URL a la que enviamos la solicitud. Agregue un término de búsqueda "curl" utilizando el parámetro "q =". Establezca la opción CURLOPT_RETURNTRANSFER, true le indicará a curl que devuelva la cadena en lugar de imprimirla. Establezca la opción para CURLOPT_HEADER, false le dirá a curl que ignore el encabezado en el valor de retorno.
Paso 3 : Ejecute la sesión curl usando curl_exec ().
Paso 4 : cierre la sesión de curl que hemos creado.
Paso 5 : genera la cadena de retorno.
Hacer DEMO :
Deberá crear dos archivos PHP y colocarlos en una carpeta desde la que su servidor web pueda servir archivos PHP. En mi caso los puse en / var / www / por simplicidad.
1. helloservice.php y 2. demo.php
helloservice.php es muy simple y esencialmente solo hace eco de los datos que obtiene:
<?php
// Here is the data we will be sending to the service
$some_data = array(
'message' => 'Hello World',
'name' => 'Anand'
);
$curl = curl_init();
// You can also set the URL you want to communicate with by doing this:
// $curl = curl_init('http://localhost/echoservice');
// We POST the data
curl_setopt($curl, CURLOPT_POST, 1);
// Set the url path we want to call
curl_setopt($curl, CURLOPT_URL, 'http://localhost/demo.php');
// Make it so the data coming back is put into a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Insert the data
curl_setopt($curl, CURLOPT_POSTFIELDS, $some_data);
// You can also bunch the above commands into an array if you choose using: curl_setopt_array
// Send the request
$result = curl_exec($curl);
// Get some cURL session information back
$info = curl_getinfo($curl);
echo 'content type: ' . $info['content_type'] . '<br />';
echo 'http code: ' . $info['http_code'] . '<br />';
// Free up the resources $curl is using
curl_close($curl);
echo $result;
?>
2.demo.php página, puedes ver el resultado:
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
La extensión cURL para PHP está diseñada para permitirle usar una variedad de recursos web desde su script PHP.
cURL en PHP es un puente para usar la línea de comando cURL desde el lenguaje php
PHP admite libcurl, una biblioteca creada por Daniel Stenberg, que le permite conectarse y comunicarse con muchos tipos diferentes de servidores con muchos tipos diferentes de protocolos. libcurl actualmente admite los protocolos http, https, ftp, gopher, telnet, dict, file y ldap. libcurl también admite certificados HTTPS, HTTP POST, HTTP PUT, carga FTP (esto también se puede hacer con la extensión ftp de PHP), carga basada en formularios HTTP, proxies, cookies y autenticación de usuario + contraseña.
Una vez que haya compilado PHP con soporte cURL, puede comenzar a usar las funciones cURL. La idea básica detrás de las funciones de cURL es que inicialice una sesión de cURL usando curl_init (), luego puede configurar todas sus opciones para la transferencia a través de curl_setopt (), luego puede ejecutar la sesión con curl_exec () y luego termine su sesión usando curl_close ().
// error reporting
error_reporting(E_ALL);
ini_set("display_errors", 1);
//setting url
$url = 'http://example.com/api';
//data
$data = array("message" => "Hello World!!!");
try {
$ch = curl_init($url);
$data_string = json_encode($data);
if (FALSE === $ch)
throw new Exception('failed to initialize');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$output = curl_exec($ch);
if (FALSE === $output)
throw new Exception(curl_error($ch), curl_errno($ch));
// ...process $output now
} catch(Exception $e) {
trigger_error(sprintf(
'Curl failed with error #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
Curl no es más que una extensión de PHP que hereda los comportamientos del comando curl normal y la biblioteca escritos principalmente para la herramienta de línea de comandos Linux / Unix
¿Qué es el rizo? cURL significa URL del cliente. El cURL se utiliza para enviar datos a cualquier URL. Para obtener más detalles sobre qué es exactamente curl, puede visitar el sitio web de CURL
cURL en PHP Ahora se introduce el mismo concepto en PHP, para enviar datos a cualquier URL accesible a través de diferentes protocolos, por ejemplo, HTTP o FTP. Para obtener más detalles, puede consultar el Tutorial de PHP Curl
Función php curl (POST, GET, DELETE, PUT)
function curl($post = array(), $url, $token = '', $method = "POST", $json = false, $ssl = true){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if($method == 'POST'){
curl_setopt($ch, CURLOPT_POST, 1);
}
if($json == true){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json','Authorization: Bearer '.$token,'Content-Length: ' . strlen($post)));
}else{
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
if($ssl == false){
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
// curl_setopt($ch, CURLOPT_HEADER, 0);
$r = curl_exec($ch);
if (curl_error($ch)) {
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
print_r('Error: ' . $err . ' Status: ' . $statusCode);
// Add error
$this->error = $err;
}
curl_close($ch);
return $r;
}
Clase de curl php (OBTENER, POSTAR, ARCHIVOS CARGADOS, SESIONES, ENVIAR POST JSON, FORCE SELFSIGNED SSL / TLS):
<?php
// Php curl class
class Curl {
public $error;
function __construct() {}
function Get($url = "http://hostname.x/api.php?q=jabadoo&txt=gin", $forceSsl = false,$cookie = "", $session = true){
// $url = $url . "?". http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$info = curl_getinfo($ch);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function GetArray($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $forceSsl = false, $cookie = "", $session = true){
$url = $url . "?". http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$info = curl_getinfo($ch);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function PostJson($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $forceSsl = false, $cookie = "", $session = true){
$data = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer helo29dasd8asd6asnav7ffa',
'Content-Type: application/json',
'Content-Length: ' . strlen($data))
);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function Post($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $files = array('ads/ads0.jpg', 'ads/ads1.jpg'), $forceSsl = false, $cookie = "", $session = true){
foreach ($files as $k => $v) {
$f = realpath($v);
if(file_exists($f)){
$fc = new CurlFile($f, mime_content_type($f), basename($f));
$data["file[".$k."]"] = $fc;
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // !!!! required as of PHP 5.6.0 for files !!!
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)");
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
}
?>
Ejemplo:
<?php
$urlget = "http://hostname.x/api.php?id=123&user=bax";
$url = "http://hostname.x/api.php";
$data = array("name" => "Max", "age" => "36");
$files = array('ads/ads0.jpg', 'ads/ads1.jpg');
$curl = new Curl();
echo $curl->Get($urlget, true, "token=12345");
echo $curl->GetArray($url, $data, true);
echo $curl->Post($url, $data, $files, true);
echo $curl->PostJson($url, $data, true);
?>
Archivo php: api.php
<?php
/*
$Cookie = session_get_cookie_params();
print_r($Cookie);
*/
session_set_cookie_params(9000, '/', 'hostname.x', isset($_SERVER["HTTPS"]), true);
session_start();
$_SESSION['cnt']++;
echo "Session count: " . $_SESSION['cnt']. "\r\n";
echo $json = file_get_contents('php://input');
$arr = json_decode($json, true);
echo "<pre>";
if(!empty($json)){ print_r($arr); }
if(!empty($_GET)){ print_r($_GET); }
if(!empty($_POST)){ print_r($_POST); }
if(!empty($_FILES)){ print_r($_FILES); }
// request headers
print_r(getallheaders());
print_r(apache_response_headers());
// Fetch a list of headers to be sent.
// print_r(headers_list());
?>