PHPでは、多くのPHPプロジェクトにWord cURLがあります。それは何ですか?それはどのように機能しますか?
参照リンク: cURL
cURL は、PHPでHTTPリクエストを行えるようにするライブラリです。あなたがそれについて知る必要があるすべて(そして他のほとんどの拡張子)は PHPマニュアル にあります。
PHPのcURL関数を使用するには、"libcurlパッケージをインストールする必要があります。 PHPを使用するには、libcurl 7.0.2-beta以降を使用する必要があります。 PHP 4.2.3では、libcurlバージョン7.9.0以降が必要になります。 PHP 4.3.0から、7.9.8以降のlibcurlバージョンが必要になります。 PHP 5.0.0には、バージョン7.10.5以降のlibcurlが必要です。
allow_url_fopen
ファイルでphp.ini
を有効にする必要がありますが、cURLなしでHTTPリクエストを行うこともできます。
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
cURLはあなたのコードからURLをヒットしてそれからhtmlレスポンスを得ることができる方法です。 cURLは、あなたが他のURLに接続してあなたのコードでそれらの応答を使うことを可能にするクライアントURLを意味します。
要約:
PHPのcurl_exec
コマンドは、コンソールからcurl
を使用するためのブリッジです。 curl_execを使用すると、GET/POST要求を素早く簡単に実行したり、JSONなどの他のサーバーから応答を受信したり、ファイルをダウンロードしたりすることが容易になります。
警告、危険:
curl
は、不適切に使用されると悪くて危険です。それは、インターネット上のデータを外部から取得することにすべて関係しているためです。誰かがあなたのcurlと他のサーバの間を行き来してあなたの応答にrm -rf /
を注入することができます、そしてなぜ私がコンソールに落とされてls -l
がもう働かなくなるのですか?あなたはカールの危険な力を過小評価しているからです。たとえあなたがあなた自身のサーバと話しているとしても、curlから戻ってくるものを安全であると信じてはいけません。あなたは彼らの富の愚か者を軽減するためにマルウェアを引き戻すことができます。
これらはUbuntu 12.10で行われました
コマンドラインからの基本的なカール:
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
それから、あなたはFirefoxであなたのGIFを開くことができます:
firefox mycat.gif
Toxoplasma gondiiを進化させて女性に猫を飼わせ、男性にも女性を飼わせている栄光の猫。
cURLの例では、google.comにアクセスする要求を取得し、コマンドラインにエコーします。
これはphpshターミナルを通して行われます。
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
これは(Googleからの)要約されたHTMLとJavaScriptの混乱を印刷してコンソールにダンプします。
cURLの例では、応答テキストを変数に入れます。
これは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;
変数は猫のアニメーションGIFであるバイナリを含みます。可能性は無限です。
PHPファイル内からカールします。
このコードを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;
}
?>
その後、コマンドラインから実行してください。
php < myphp.php
Myphp.phpを実行し、それらのコマンドをphpインタプリタを介して実行し、大量のhtmlとjavascriptを画面に表示しました。
Curlを使用してGET
およびPOST
リクエストを実行できます。ここで定義されているようにパラメータを指定するだけです。 curlを使用してHTTPジョブを自動化する
危険を思い出させるもの:
それが解釈されて実行され、あなたのボックスが所有され、そしてあなたのクレジットカード情報が第三者に売られるならば、周りのカール出力を投げ捨てるようにしてください。海外のクレジットカード詐欺犯罪リングのための正面。
cURLはコードからURLにアクセスしてそこからHTML応答を取得する方法です。 PHP言語のコマンドラインのcURLに使用されます。
<?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;
?>
ステップ1:curl_init()
を使用してカールセッションを初期化します。
ステップ2:CURLOPT_URL
のオプションを設定します。この値は、リクエストを送信しているURLです。パラメータq=
を使用して検索語curl
を追加します。 CURLOPT_RETURNTRANSFER
のオプションを設定します。 Trueならcurlに文字列を出力するのではなく返すように指示します。 CURLOPT_HEADER
にoptionを設定し、falseにすると、curlに戻り値のヘッダーを無視するように指示します。
ステップ3:curl_exec()
を使用してカールセッションを実行します。
ステップ4:作成したカールセッションを閉じます。
手順5:戻り文字列を出力する.
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;
}
これは認証にも使用されます。認証用のユーザー名とパスワードも設定できます。
その他の機能については、ユーザーマニュアルまたは次のチュートリアルを参照してください。
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
最初に、curl、libcurl、およびPHP/cURLの概念を理解しましょう。
curl:URL構文を使用してファイルを取得または送信するためのコマンドラインツール。
libcurl:Daniel Stenbergによって作成されたライブラリで、さまざまな種類のプロトコルを使ってさまざまな種類のサーバーに接続して通信できます。 libcurlは現在、http、https、ftp、Gopher、telnet、dict、file、およびldapの各プロトコルをサポートしています。 libcurlは、HTTPS証明書、HTTP POST、HTTP PUT、FTPアップロード(これはPHPのftp拡張子でも行うことができます)、HTTPフォームベースのアップロード、プロキシ、Cookie、およびユーザーとパスワードによる認証をサポートしています。
PHP/cURL:PHPプログラムがlibcurlを使用できるようにするPHP用のモジュール。
どうやって使うのですか:
step1:curl_init()を使って、カールセッションを初期化します。
step2:CURLOPT_URLのオプションを設定します。パラメータ「q =」を使用して検索語「curl」を追加し、オプションCURLOPT_RETURNTRANSFERをtrueに設定すると、文字列を出力せずに文字列が返されるようになります。 CURLOPT_HEADERにオプションを設定し、falseにすると、curlに戻り値のヘッダーを無視するよう指示します。
step3:curl_exec()でカールセッションを実行する。
step4:作成したカールセッションを閉じます。
step5:復帰文字列を出力します。
デモを作る:
2つのPHPファイルを作成し、WebサーバーがPHPファイルを提供できるフォルダに配置する必要があります。私の場合は、簡単のためにそれらを/ var/www /に入れます。
1。 helloservice.phpおよび2。 demo.php
helloservice.phpは非常に単純で、取得したデータをエコーバックします。
<?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ページには、結果が表示されます。
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
PHPのcURL拡張子は、PHPスクリプト内からさまざまなWebリソースを使用できるように設計されています。
PHPのcURLは、php言語のコマンドラインcURLを使用するためのブリッジです。
PHPは、Daniel Stenbergによって作成されたライブラリlibcurlをサポートします。このライブラリを使用すると、さまざまな種類のプロトコルを使用してさまざまな種類のサーバーに接続して通信できます。 libcurlは現在、http、https、ftp、Gopher、telnet、dict、file、およびldapの各プロトコルをサポートしています。 libcurlは、HTTPS証明書、HTTP POST、HTTP PUT、FTPアップロード(これはPHPのftp拡張子でも行うことができます)、HTTPフォームベースのアップロード、プロキシ、Cookie、およびユーザーとパスワードによる認証をサポートしています。
CURLをサポートするPHPをコンパイルしたら、cURL関数を使い始めることができます。 cURL関数の基本的な考え方は、curl_init()を使用してcURLセッションを初期化し、次にcurl_setopt()を使用してすべての転送オプションを設定し、次にcurl_exec()を使用してセッションを実行することです。 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はPHPの拡張に他なりません。これは、主にLinux/Unixコマンドラインツール用に書かれた通常のcurlコマンドおよびライブラリの動作を継承する
Curlとは何ですか?cURLはクライアントURLを表します。 cURLは任意のURLにデータを送信するために使用されます。正確なカールの詳細については、 CURL Webサイト をご覧ください。
cURL in PHPこれでPHPでも同じ概念が導入され、HTTPやFTPなど、異なるプロトコルを介してアクセス可能な任意のURLにデータを送信できます。詳しくは、 PHP Curl Tutorial を参照してください。
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;
}
PHPカールクラス(GET、POST、ファイルのアップロード、セッション、SEND 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;
}
}
}
?>
例:
<?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ファイル: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());
?>