W PHP widzę słowo cURL w wielu projektach PHP. Co to jest? Jak to działa?
Odnośnik: cURL
W PHP widzę słowo cURL w wielu projektach PHP. Co to jest? Jak to działa?
Odnośnik: cURL
Odpowiedzi:
cURL to biblioteka, która pozwala na wysyłanie żądań HTTP w PHP. Wszystko, co musisz o tym wiedzieć (i większość innych rozszerzeń) można znaleźć w instrukcji PHP .
Aby korzystać z funkcji cURL PHP, musisz zainstalować pakiet »libcurl. PHP wymaga używania libcurl 7.0.2-beta lub nowszego. W PHP 4.2.3 potrzebujesz libcurl w wersji 7.9.0 lub nowszej. Od PHP 4.3.0 potrzebujesz wersji libcurl 7.9.8 lub nowszej. PHP 5.0.0 wymaga libcurl w wersji 7.10.5 lub nowszej.
Możesz również wysyłać żądania HTTP bez cURL, chociaż wymaga allow_url_fopen
to włączenia w php.ini
pliku.
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
cURL to sposób, w jaki możesz trafić adres URL ze swojego kodu, aby uzyskać od niego odpowiedź HTML. cURL oznacza adres URL klienta, który pozwala łączyć się z innymi adresami URL i wykorzystywać ich odpowiedzi w kodzie.
Podsumowanie:
curl_exec
Polecenie PHP jest most do użytkucurl
z konsoli. curl_exec ułatwia szybkie i łatwe wykonywanie żądań GET / POST, otrzymywanie odpowiedzi z innych serwerów, takich jak JSON, i pobieranie plików.
Ostrzeżenie, niebezpieczeństwo:
curl
jest złe i niebezpieczne, jeśli jest niewłaściwie używane, ponieważ chodzi o pobieranie danych z Internetu. Ktoś może dostać się między twoim lokiem a drugim serwerem i wstrzyknąć rm -rf /
twoją odpowiedź, a potem dlaczego spadłem na konsolę ils -l
nawet już nie działa? Ponieważ źle nie doceniłeś niebezpiecznej mocy zwijania się. Nie ufaj, że wszystko, co wraca z curl, jest bezpieczne, nawet jeśli rozmawiasz ze swoimi serwerami. Możesz wycofywać złośliwe oprogramowanie, aby uwolnić głupców od ich bogactwa.
Zostały one wykonane na Ubuntu 12.10
Podstawowe curl z wiersza poleceń:
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
Następnie możesz otworzyć swój gif w Firefoksie:
firefox mycat.gif
Chwalebne koty ewoluujące Toxoplasma gondii, aby kobiety trzymały koty w pobliżu, a mężczyźni podobnie trzymali kobiety w pobliżu.
Przykład cURL otrzymuje prośbę o trafienie na google.com, echo do wiersza poleceń:
Odbywa się to przez terminal phpsh:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
Który drukuje i zrzuca bałagan skondensowanego HTML i javascript (z Google) do konsoli.
Przykład cURL umieścił tekst odpowiedzi w zmiennej:
Odbywa się to przez 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;
Zmienna zawiera teraz plik binarny, który jest animowanym gifem kota, możliwości są nieograniczone.
Wykonaj zawinięcie w pliku PHP:
Umieść ten kod w pliku o nazwie 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;
}
?>
Następnie uruchom go za pomocą wiersza polecenia:
php < myphp.php
Uruchomiłeś myphp.php i wykonałeś te polecenia przez interpreter php i zrzuciłeś mnóstwo niechlujnego html i javascript na ekran.
Możesz robić GET
i POST
żądać za pomocą curl, wszystko co musisz zrobić, to określić parametry zdefiniowane tutaj: Używanie curl do automatyzacji zadań HTTP
Przypomnienie o niebezpieczeństwie:
Zachowaj ostrożność, zrzucając wywinięte zawijasy, jeśli którekolwiek z nich zostanie zinterpretowane i wykonane, Twoje pudełko jest własnością, a dane Twojej karty kredytowej zostaną sprzedane stronom trzecim, a otrzymasz tajemniczą opłatę w wysokości 900 USD od jednoosobowej firmy podłogowej Alabama, która jest z przodu za przestępstwa dotyczące oszustw związanych z kartami kredytowymi za granicą
cURL to sposób, w jaki możesz trafić adres URL ze swojego kodu, aby uzyskać od niego odpowiedź HTML. Służy do wiersza poleceń cURL z języka 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;
?>
Krok 1: Zainicjuj sesję curl za pomocą curl_init()
.
Krok 2: Ustaw opcję dla CURLOPT_URL
. Ta wartość to adres URL, na który wysyłamy żądanie. Dodaj wyszukiwane hasło curl
za pomocą parametru q=
. Ustaw opcję dla CURLOPT_RETURNTRANSFER
. Prawda każe curl zwrócić ciąg zamiast drukować. Ustaw opcję dla CURLOPT_HEADER
, false spowoduje, że curl zignoruje nagłówek w zwracanej wartości.
Krok 3: Wykonaj sesję curl za pomocą curl_exec()
.
Krok 4: Zamknij utworzoną sesję curl.
Krok 5: Wyprowadzenie ciągu zwrotnego.
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;
}
Służy to również do uwierzytelnienia. Możemy również ustawić nazwę użytkownika i hasło do uwierzytelnienia.
Aby uzyskać więcej funkcji, zobacz instrukcję obsługi lub następujący samouczek:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
Po pierwsze, zrozummy pojęcia curl, libcurl i PHP / cURL.
curl : narzędzie wiersza polecenia do pobierania lub wysyłania plików przy użyciu składni URL.
libcurl : biblioteka stworzona przez Daniela Stenberga, która pozwala łączyć się i komunikować z wieloma różnymi typami serwerów z wieloma różnymi typami protokołów. libcurl obsługuje obecnie protokoły http, https, ftp, gopher, telnet, dict, file i ldap. libcurl obsługuje również certyfikaty HTTPS, HTTP POST, HTTP PUT, przesyłanie FTP (można to również zrobić z rozszerzeniem ftp PHP), przesyłanie oparte na formularzu HTTP, serwery proxy, pliki cookie oraz uwierzytelnianie użytkownika + hasło.
PHP / cURL : moduł dla PHP, który umożliwia programom PHP używanie libcurl.
Jak tego użyć:
krok 1 : Zainicjuj sesję curl użyj curl_init ().
krok 2 : Ustaw opcję dla CURLOPT_URL. Ta wartość to adres URL, do którego wysyłamy zapytanie. Dołącz wyszukiwany termin „curl” za pomocą parametru „q =”. Ustaw opcję CURLOPT_RETURNTRANSFER, true powie curl, aby zwrócił ciąg zamiast drukować go. Ustaw opcję dla CURLOPT_HEADER, false spowoduje, że curl zignoruje nagłówek w zwracanej wartości.
krok 3 : Wykonaj sesję curl za pomocą curl_exec ().
step4 : Zamknij utworzoną sesję curl.
step5 : Wyprowadza zwracany ciąg.
Zrób DEMO :
Musisz utworzyć dwa pliki PHP i umieścić je w folderze, z którego Twój serwer WWW może obsługiwać pliki PHP. W moim przypadku dla uproszczenia umieściłem je w katalogu / var / www /.
1. helloservice.php i 2. demo.php
helloservice.php jest bardzo prosty i zasadniczo przypomina wszystkie otrzymywane dane:
<?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. strona demo.php , możesz zobaczyć wynik:
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
Rozszerzenie cURL do PHP zostało zaprojektowane tak, aby umożliwić Ci korzystanie z różnych zasobów sieciowych z poziomu skryptu PHP.
cURL w PHP jest pomostem do używania wiersza poleceń cURL z języka php
PHP obsługuje libcurl, bibliotekę stworzoną przez Daniela Stenberga, która pozwala łączyć się i komunikować z wieloma różnymi typami serwerów z wieloma różnymi typami protokołów. libcurl obsługuje obecnie protokoły http, https, ftp, gopher, telnet, dict, file i ldap. libcurl obsługuje również certyfikaty HTTPS, HTTP POST, HTTP PUT, przesyłanie FTP (można to również zrobić z rozszerzeniem ftp PHP), przesyłanie oparte na formularzu HTTP, serwery proxy, pliki cookie oraz uwierzytelnianie użytkownika + hasło.
Po skompilowaniu PHP z obsługą cURL możesz zacząć korzystać z funkcji cURL. Podstawową ideą funkcji cURL jest to, że inicjujesz sesję cURL za pomocą curl_init (), następnie możesz ustawić wszystkie opcje przesyłania za pomocą curl_setopt (), następnie możesz wykonać sesję za pomocą curl_exec (), a następnie zakończ sesję za pomocą 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 to nic innego jak rozszerzenie PHP, które dziedziczy zachowania normalnego polecenia curl i biblioteki napisanego głównie dla narzędzia wiersza poleceń Linux / Unix
Co to jest Curl? cURL oznacza URL klienta. CURL służy do wysyłania danych na dowolny adres URL. Aby uzyskać więcej informacji na temat tego, czym dokładnie jest curl, możesz odwiedzić stronę internetową CURL
cURL w PHP Teraz ta sama koncepcja została wprowadzona w PHP, aby wysyłać dane do dowolnego dostępnego adresu URL za pośrednictwem innego protokołu, na przykład HTTP lub FTP. Aby uzyskać więcej informacji, możesz zapoznać się z Tutorialem Curl PHP
Funkcja curl php (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;
}
Klasa curl php (GET, POST, PLIKI UPLOAD, SESJE, WYŚLIJ 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;
}
}
}
?>
Przykład:
<?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);
?>
Plik 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());
?>