In PHP sehe ich das Wort cURL in vielen PHP-Projekten. Was ist es? Wie funktioniert es?
Referenzlink: cURL
In PHP sehe ich das Wort cURL in vielen PHP-Projekten. Was ist es? Wie funktioniert es?
Referenzlink: cURL
Antworten:
cURL ist eine Bibliothek, mit der Sie HTTP-Anforderungen in PHP stellen können. Alles, was Sie darüber wissen müssen (und die meisten anderen Erweiterungen), finden Sie im PHP-Handbuch .
Um die cURL-Funktionen von PHP nutzen zu können, müssen Sie das »libcurl-Paket installieren. Für PHP müssen Sie libcurl 7.0.2-beta oder höher verwenden. In PHP 4.2.3 benötigen Sie libcurl Version 7.9.0 oder höher. Ab PHP 4.3.0 benötigen Sie eine libcurl-Version ab 7.9.8. PHP 5.0.0 erfordert eine libcurl-Version 7.10.5 oder höher.
Sie können HTTP-Anforderungen auch ohne cURL stellen, obwohl dies allow_url_fopen
in Ihrer php.ini
Datei aktiviert sein muss .
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
Mit cURL können Sie eine URL aus Ihrem Code aufrufen, um eine HTML-Antwort zu erhalten. cURL bedeutet Client-URL, mit der Sie eine Verbindung zu anderen URLs herstellen und deren Antworten in Ihrem Code verwenden können.
Zusammenfassung:
Der curl_exec
Befehl in PHP ist eine Bridge, die curl
von der Konsole aus verwendet werden kann. Mit curl_exec können Sie schnell und einfach GET / POST-Anforderungen ausführen, Antworten von anderen Servern wie JSON empfangen und Dateien herunterladen.
Achtung, Gefahr:
curl
ist böse und gefährlich, wenn es unsachgemäß verwendet wird, weil es darum geht, Daten von dort draußen im Internet abzurufen. Jemand kann zwischen Ihre Locke und den anderen Server gelangen und eine rm -rf /
in Ihre Antwort einfügen. Warum werde ich dann auf eine Konsole fallen gelassen und ls -l
arbeite nicht einmal mehr? Weil Sie die gefährliche Kraft des Lockens falsch unterschätzt haben. Vertrauen Sie nichts, was von Curl zurückkommt, um sicher zu gehen, selbst wenn Sie mit Ihren eigenen Servern sprechen. Sie könnten Malware zurückziehen, um Dummköpfe von ihrem Reichtum zu entlasten.
Diese wurden unter Ubuntu 12.10 durchgeführt
Grundlegende Locke von der Kommandozeile:
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
Dann können Sie Ihr GIF in Firefox öffnen:
firefox mycat.gif
Herrliche Katzen, die Toxoplasma gondii entwickeln, veranlassen Frauen, Katzen in der Nähe zu halten, und Männer, die Frauen in der Nähe zu halten.
Beispiel für eine cURL-Anfrage zum Aufrufen von google.com, Echo zur Befehlszeile:
Dies erfolgt über das PHPH-Terminal:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
Dadurch wird ein Durcheinander von komprimiertem HTML und Javascript (von Google) gedruckt und auf die Konsole übertragen.
Beispiel cURL Fügen Sie den Antworttext in eine Variable ein:
Dies erfolgt über das PHPH-Terminal:
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;
Die Variable enthält jetzt die Binärdatei, die ein animiertes GIF einer Katze ist. Die Möglichkeiten sind unendlich.
Machen Sie eine Locke aus einer PHP-Datei heraus:
Fügen Sie diesen Code in eine Datei mit dem Namen myphp.php ein:
<?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;
}
?>
Führen Sie es dann über die Befehlszeile aus:
php < myphp.php
Sie haben myphp.php ausgeführt und diese Befehle über den PHP-Interpreter ausgeführt und eine Menge chaotischer HTML- und Javascript-Dateien auf den Bildschirm geschrieben.
Sie können mit curl etwas tun GET
und POST
anfordern. Sie müssen lediglich die hier definierten Parameter angeben: Verwenden von curl zum Automatisieren von HTTP-Jobs
Erinnerung an die Gefahr:
Seien Sie vorsichtig, wenn Sie die Curl-Ausgabe herumwerfen. Wenn etwas davon interpretiert und ausgeführt wird, ist Ihre Box im Besitz und Ihre Kreditkarteninformationen werden an Dritte verkauft. Sie erhalten eine mysteriöse Gebühr von 900 USD von einer Ein-Mann-Bodenbelagsfirma in Alabama, die eine Front für Übersee-Kreditkartenbetrug Kriminalring.
Mit cURL können Sie eine URL aus Ihrem Code abrufen, um eine HTML-Antwort darauf zu erhalten. Es wird für die Befehlszeilen-CURL aus der PHP-Sprache verwendet.
<?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;
?>
Schritt 1: Initialisieren Sie eine Curl-Sitzung mit curl_init()
.
Schritt 2: Option für einstellen CURLOPT_URL
. Dieser Wert ist die URL, an die wir die Anfrage senden. Fügen Sie einen Suchbegriff curl
mit einem Parameter hinzu q=
. Option einstellen für CURLOPT_RETURNTRANSFER
. True weist curl an, die Zeichenfolge zurückzugeben, anstatt sie auszudrucken. Wenn Sie die Option für CURLOPT_HEADER
false festlegen, wird curl angewiesen, den Header im Rückgabewert zu ignorieren.
Schritt 3: Führen Sie die Curl-Sitzung mit aus curl_exec()
.
Schritt 4: Schließen Sie die von uns erstellte Curl-Sitzung.
Schritt 5: Geben Sie die Rückgabezeichenfolge aus.
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;
}
Dies wird auch zur Authentifizierung verwendet. Wir können auch den Benutzernamen und das Passwort für die Authentifizierung festlegen.
Weitere Funktionen finden Sie im Benutzerhandbuch oder im folgenden Tutorial:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
Lassen Sie uns zunächst die Konzepte von curl, libcurl und PHP / cURL verstehen.
curl : Ein Befehlszeilenprogramm zum Abrufen oder Senden von Dateien mithilfe der URL-Syntax.
libcurl : Eine von Daniel Stenberg erstellte Bibliothek, mit der Sie eine Verbindung herstellen und mit vielen verschiedenen Servertypen mit vielen verschiedenen Protokolltypen kommunizieren können. libcurl unterstützt derzeit die Protokolle http, https, ftp, gopher, telnet, dict, file und ldap. libcurl unterstützt auch HTTPS-Zertifikate, HTTP-POST, HTTP-PUT, FTP-Upload (dies kann auch mit der FTP-Erweiterung von PHP erfolgen), HTTP-formularbasiertes Upload, Proxys, Cookies und Benutzer- und Kennwortauthentifizierung.
PHP / cURL : Das Modul für PHP, mit dem PHP-Programme libcurl verwenden können.
Wie man es benutzt:
Schritt 1 : Initialisieren Sie eine Curl-Sitzung mit curl_init ().
Schritt 2 : Option für CURLOPT_URL festlegen. Dieser Wert ist die URL, an die wir die Anforderung senden. Fügen Sie einen Suchbegriff "curl" mit dem Parameter "q =" hinzu. Setzen Sie die Option CURLOPT_RETURNTRANSFER. True weist curl an, die Zeichenfolge zurückzugeben, anstatt sie auszudrucken. Wenn Sie die Option für CURLOPT_HEADER auf false setzen, wird curl angewiesen, den Header im Rückgabewert zu ignorieren.
Schritt 3 : Führen Sie die Curl-Sitzung mit curl_exec () aus.
Schritt 4 : Schließen Sie die von uns erstellte Curl-Sitzung.
Schritt 5 : Geben Sie die Rückgabezeichenfolge aus.
Machen Sie DEMO :
Sie müssen zwei PHP-Dateien erstellen und in einem Ordner ablegen, aus dem Ihr Webserver PHP-Dateien bereitstellen kann. In meinem Fall habe ich sie der Einfachheit halber in / var / www / abgelegt.
1. helloservice.php und 2. demo.php
helloservice.php ist sehr einfach und gibt im Wesentlichen nur alle Daten zurück, die es erhält:
<?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 Seite können Sie das Ergebnis sehen:
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
Die cURL-Erweiterung für PHP ermöglicht es Ihnen, eine Vielzahl von Webressourcen in Ihrem PHP-Skript zu verwenden.
cURL in PHP ist eine Brücke zur Verwendung der Befehlszeilen-cURL aus der PHP-Sprache
PHP unterstützt libcurl, eine von Daniel Stenberg erstellte Bibliothek, mit der Sie eine Verbindung herstellen und mit vielen verschiedenen Servertypen mit vielen verschiedenen Protokolltypen kommunizieren können. libcurl unterstützt derzeit die Protokolle http, https, ftp, gopher, telnet, dict, file und ldap. libcurl unterstützt auch HTTPS-Zertifikate, HTTP-POST, HTTP-PUT, FTP-Upload (dies kann auch mit der FTP-Erweiterung von PHP erfolgen), HTTP-formularbasiertes Upload, Proxys, Cookies und Benutzer- und Kennwortauthentifizierung.
Sobald Sie PHP mit cURL-Unterstützung kompiliert haben, können Sie die cURL-Funktionen verwenden. Die Grundidee hinter den cURL-Funktionen besteht darin, dass Sie eine cURL-Sitzung mit curl_init () initialisieren, dann alle Optionen für die Übertragung über curl_setopt () festlegen, dann die Sitzung mit curl_exec () ausführen und dann Sie Beenden Sie Ihre Sitzung mit 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 ist nichts anderes als eine Erweiterung von PHP, die das Verhalten des normalen Curl-Befehls und der normalen Curl-Bibliothek erbt, die hauptsächlich für das Linux / Unix-Befehlszeilentool geschrieben wurden
Was ist Curl? cURL steht für Client URL. Die cURL wird verwendet, um Daten an eine beliebige URL zu senden. Weitere Informationen darüber, was Curl genau ist, finden Sie auf der CURL-Website
cURL in PHP Nun wird in PHP das gleiche Konzept eingeführt, um Daten über das andere Protokoll, z. B. HTTP oder FTP, an eine beliebige zugängliche URL zu senden. Weitere Informationen finden Sie im PHP Curl Tutorial
PHP-Curl-Funktion (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;
}
PHP-Curl-Klasse (GET, POST, DATEIEN HOCHLADEN, SITZUNGEN, SENDEN 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;
}
}
}
?>
Beispiel:
<?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);
?>
PHP-Datei: 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());
?>