No PHP, vejo a palavra cURL em muitos projetos PHP. O que é isso? Como funciona?
Link de referência: cURL
No PHP, vejo a palavra cURL em muitos projetos PHP. O que é isso? Como funciona?
Link de referência: cURL
Respostas:
cURL é uma biblioteca que permite fazer solicitações HTTP em PHP. Tudo o que você precisa saber sobre ele (e a maioria das outras extensões) pode ser encontrado no manual do PHP .
Para usar as funções cURL do PHP, você precisa instalar o pacote »libcurl. O PHP requer que você use libcurl 7.0.2-beta ou superior. No PHP 4.2.3, você precisará da libcurl versão 7.9.0 ou superior. No PHP 4.3.0, você precisará de uma versão libcurl 7.9.8 ou superior. O PHP 5.0.0 requer uma versão libcurl 7.10.5 ou superior.
Você também pode fazer solicitações HTTP sem cURL, embora isso precise allow_url_fopen
ser ativado em seu php.ini
arquivo.
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
cURL é uma maneira de acessar uma URL do seu código para obter uma resposta html. cURL significa URL do cliente que permite que você se conecte com outros URLs e use suas respostas no seu código.
Resumo:
O curl_exec
comando no PHP é uma ponte para usar curl
no console. O curl_exec facilita com rapidez e facilidade solicitações GET / POST, recebe respostas de outros servidores como JSON e baixa arquivos.
Aviso, Perigo:
curl
é mau e perigoso se usado incorretamente, porque se trata de obter dados de lá na internet. Alguém pode ficar entre o seu curl e o outro servidor e injetar um rm -rf /
na sua resposta; então, por que eu fui para o console e ls -l
nem funcionei mais? Porque você subestimou o poder perigoso do enrolamento. Não confie em nada que retorne do curl para ser seguro, mesmo se você estiver falando com seus próprios servidores. Você poderia estar retirando malware para aliviar os tolos de sua riqueza.
Isso foi feito no Ubuntu 12.10
Onda básica a partir da linha de comando:
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
Em seguida, você pode abrir seu gif no Firefox:
firefox mycat.gif
Gatos gloriosos evoluindo o Toxoplasma gondii para fazer com que as mulheres mantenham os gatos por perto e os homens da mesma forma para manter as mulheres por perto.
exemplo cURL get request para acessar google.com, eco para a linha de comando:
Isso é feito através do terminal phpsh:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
Que imprime e despeja uma bagunça de html e javascript condensado (do google) no console.
O exemplo cURL coloca o texto da resposta em uma variável:
Isso é feito através do 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;
A variável agora contém o binário, que é um gif animado de um gato, as possibilidades são infinitas.
Faça uma curvatura de dentro de um arquivo PHP:
Coloque esse código em um arquivo chamado 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;
}
?>
Em seguida, execute-o via linha de comando:
php < myphp.php
Você executou myphp.php e executou esses comandos através do interpretador php e despejou uma tonelada de html e javascript confusos na tela.
Você pode fazer GET
e POST
solicitar com curl, tudo o que você faz é especificar os parâmetros conforme definido aqui: Usando curl para automatizar tarefas HTTP
Lembrete de perigo:
Tenha cuidado ao despejar a saída de curl, se alguma delas for interpretada e executada, sua caixa é de propriedade e as informações do seu cartão de crédito serão vendidas a terceiros e você receberá uma cobrança misteriosa de US $ 900 de uma empresa de pisos de Alabama que é uma frente para anel de crime de fraude no cartão de crédito no exterior.
cURL é uma maneira de acessar uma URL do seu código para obter uma resposta HTML. É usado para linha de comando cURL da linguagem 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;
?>
Etapa 1: inicialize uma sessão de curl usando curl_init()
.
Etapa 2: defina a opção para CURLOPT_URL
. Este valor é o URL para o qual estamos enviando a solicitação. Anexar um termo de pesquisa curl
usando o parâmetro q=
. Defina a opção para CURLOPT_RETURNTRANSFER
. True diz ao curl para retornar a string em vez de imprimi-la. Defina a opção for CURLOPT_HEADER
, false informará o curl para ignorar o cabeçalho no valor de retorno.
Etapa 3: Execute a sessão de curvatura usando curl_exec()
.
Etapa 4: feche a sessão de ondulação que criamos.
Etapa 5: envie a string 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;
}
Isso também é usado para autenticação. Também podemos definir o nome de usuário e a senha para autenticação.
Para obter mais funcionalidades, consulte o manual do usuário ou o seguinte tutorial:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
Primeiramente, vamos entender os conceitos de curl, libcurl e PHP / cURL.
curl : uma ferramenta de linha de comando para obter ou enviar arquivos usando a sintaxe da URL.
libcurl : uma biblioteca criada por Daniel Stenberg, que permite conectar e se comunicar com muitos tipos diferentes de servidores com muitos tipos diferentes de protocolos. A libcurl atualmente suporta os protocolos http, https, ftp, gopher, telnet, dict, file e ldap. A libcurl também suporta certificados HTTPS, HTTP POST, HTTP PUT, upload de FTP (isso também pode ser feito com a extensão ftp do PHP), upload baseado em formulário HTTP, proxies, cookies e autenticação de usuário e senha.
PHP / cURL : O módulo para PHP que possibilita que os programas PHP usem libcurl.
Como usá-lo:
Etapa 1 : inicializar uma sessão de curl use curl_init ().
Etapa 2 : defina a opção para CURLOPT_URL. Esse valor é o URL para o qual estamos enviando a solicitação. Anexe um termo de pesquisa "curl" usando o parâmetro "q =". Defina a opção CURLOPT_RETURNTRANSFER, true informará o curl para retornar a string em vez de imprimi-la. Defina a opção CURLOPT_HEADER, false informará o curl para ignorar o cabeçalho no valor de retorno.
etapa 3 : Execute a sessão de ondulação usando curl_exec ().
Passo 4 : feche a sessão de ondulação que criamos.
step5 : Saída da string de retorno.
Faça DEMO :
Você precisará criar dois arquivos PHP e colocá-los em uma pasta na qual seu servidor Web possa servir arquivos PHP. No meu caso, eu os coloquei em / var / www / para simplificar.
1. helloservice.php e 2. demo.php
helloservice.php é muito simples e basicamente apenas repete todos os dados que obtém:
<?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 , você pode ver o resultado:
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
A extensão cURL para PHP foi projetada para permitir o uso de uma variedade de recursos da Web a partir do seu script PHP.
cURL no PHP é uma ponte para usar a linha de comando cURL da linguagem php
O PHP suporta a libcurl, uma biblioteca criada por Daniel Stenberg, que permite conectar e se comunicar com muitos tipos diferentes de servidores com muitos tipos diferentes de protocolos. A libcurl atualmente suporta os protocolos http, https, ftp, gopher, telnet, dict, file e ldap. A libcurl também suporta certificados HTTPS, HTTP POST, HTTP PUT, upload de FTP (isso também pode ser feito com a extensão ftp do PHP), upload baseado em formulário HTTP, proxies, cookies e autenticação de usuário e senha.
Depois de compilar o PHP com suporte a cURL, você pode começar a usar as funções cURL. A idéia básica por trás das funções cURL é que você inicialize uma sessão cURL usando o curl_init (), defina todas as suas opções para a transferência via curl_setopt () e execute a sessão com o curl_exec () e, em seguida, execute finalize sua sessão usando o 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 nada mais é que uma extensão do PHP que herda comportamentos do comando curl normal e da biblioteca escritos principalmente para a ferramenta de linha de comando Linux / Unix
O que é Curl? cURL significa URL do cliente. O cURL é usado para enviar dados para qualquer URL. Para obter mais detalhes sobre o que é exatamente a curvatura, visite o site da CURL
cURL no PHP Agora, o mesmo conceito é introduzido no PHP, para enviar dados para qualquer URL acessível por meio de um protocolo diferente, por exemplo, HTTP ou FTP. Para mais detalhes, você pode consultar o PHP Curl Tutorial
Função 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;
}
Classe php curl (GET, POST, UPLOAD DE ARQUIVOS, SESSÕES, ENVIAR POST JSON, FORCE SIGNIFICADO 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;
}
}
}
?>
Exemplo:
<?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);
?>
Arquivo 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());
?>