Home  >  Article  >  Backend Development  >  Detailed introductory tutorial for php CURL function_PHP tutorial

Detailed introductory tutorial for php CURL function_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:16:30826browse

The cURL function in PHP has a set of related functions. It is a very good function. We often use it to simulate various login and collection tasks. Let me introduce you to the introduction of the CURL function.

Introduction to cURL

cURL is a tool that uses URL syntax to transfer data and files. It supports many protocols such as HTTP, FTP, TELNET, etc. PHP also supports the cURL library.


If we want to obtain the content of a certain web page, we may use the following methods:

The code is as follows Copy code
 代码如下 复制代码


// 把整个文件读入一个字符串中
$str = file_get_contents("http://www.bKjia.c0m");

// 把整个文件读入一个数组中
$arr = file("http://www.bKjia.c0m");

// 读入一个文件并写入到输出缓冲
$out = readfile("http://www.bKjia.c0m");
?>


 

// Read the entire file into a string

$str = file_get_contents("http://www.bKjia.c0m");

//Read the entire file into an array

$arr = file("http://www.bKjia.c0m");

代码如下 复制代码

header("Content-type: text/html; charset=utf-8");

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. 执行并获取返回的内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl资源
curl_close($ch);

// 输出获得的源代码
echo $output;
?>

//Read a file and write to the output buffer

$out = readfile("http://www.bKjia.c0m");
?>


These methods are quite simple, but lack flexibility and effective error handling. And they cannot complete some difficult actions, such as processing cookies, verification, form submission, file upload, etc.

 代码如下 复制代码

 

header("Content-type: text/html; charset=utf-8");

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

// 获取 cURL 信息 并输出
$info = curl_getinfo($ch);
echo '获取 '. $info['url'] . ' 耗时 '. $info['total_time'] . '秒';

// 5. 释放curl句柄
curl_close($ch);
?>

cURL simple example The following is a simple code, from which you can learn the general steps of using cURL, php cURL introductory tutorial.
The code is as follows Copy code
header("Content-type: text/html; charset=utf-8");<🎜> <🎜>// 1. Initialization<🎜> $ch = curl_init();<🎜> <🎜>// 2. Setting options<🎜> curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");<🎜> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<🎜> curl_setopt($ch, CURLOPT_HEADER, 0);<🎜> <🎜>// 3. Execute and get the returned content<🎜> $output = curl_exec($ch);<🎜> <🎜>// 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs <🎜> if ($output === FALSE) {<🎜> echo "cURL Error: " . curl_error($ch);<🎜> }<🎜> <🎜> // 5. Release curl resources <🎜> curl_close($ch);<🎜> <🎜>//Output the obtained source code<🎜> echo $output;<🎜> ?>
Regarding the second step, curl_setopt() is the most important. There is a long list of cURL parameters to set, which can specify various details of the URL request. Get information This is another optional setting that can obtain information about this request after cURL is executed:
The code is as follows Copy code
header("Content-type: text/html; charset=utf-8");<🎜> <🎜>// 1. Initialization<🎜> $ch = curl_init();<🎜> <🎜>// 2. Setting options<🎜> curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");<🎜> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<🎜> curl_setopt($ch, CURLOPT_HEADER, 0);<🎜> <🎜>/// 3. Execute and obtain the HTML document content<🎜> $output = curl_exec($ch);<🎜> <🎜>// 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs <🎜> if ($output === FALSE) {<🎜> echo "cURL Error: " . curl_error($ch);<🎜> }<🎜> <🎜>// Get cURL information and output <🎜> $info = curl_getinfo($ch);<🎜> echo 'Get '. $info['url'] . ' Time consuming '. $info['total_time'] . 'Seconds';<🎜> <🎜>// 5. Release curl handle<🎜> curl_close($ch);<🎜> ?>


The returned array includes the following information:


"url" // Resource network address
"content_type" // Content type and encoding
"http_code" // HTTP status code
"header_size" // header size
"request_size" // Request size
"filetime" // file creation time
"ssl_verify_result" // SSL verification result
"redirect_count" // Jump technology
"total_time" //Total time spent
"namelookup_time" // DNS query time
"connect_time" // Time spent waiting for connection
"pretransfer_time" // Preparation time before transfer
"size_upload" // Size of uploaded data
"size_download" // Size of downloaded data
"speed_download" // Download speed
"speed_upload" // Upload speed
"download_content_length" // The length of the download content
"upload_content_length" // The length of the uploaded content
"starttransfer_time" // Time to start transfer
"redirect_time" // redirection time

Send data using POST method

New from.php

The code is as follows Copy code
 代码如下 复制代码


header("Content-type: text/html; charset=utf-8");

// 待 post 的数据
$post_data = array (
"hyh" => "man",
    "xlp" => "woman",
    "love" => "yes"
);

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); // 这里设置为post方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 添加准备post的数据

// 3. 执行并获取返回内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
    echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl句柄
curl_close($ch);

// 输出内容
echo $output;
?>


 

header("Content-type: text/html; charset=utf-8");

代码如下 复制代码


header("Content-type: text/html; charset=utf-8");

echo "从 from.php POST数据到 to.php 成功!以下为 to.php 返回的数据:

";
print_r($_POST);
echo "

I'm come from http://www.bKjia.c0m"
?>


 

//Data to be posted $post_data = array ( "hyh" => "man", "xlp" => "woman", "love" => "yes" ); // 1. Initialization $ch = curl_init(); // 2. Setting options curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); // Set to post mode here curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // Add data to prepare for post /// 3. Execute and get the returned content $output = curl_exec($ch); // 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs if ($output === FALSE) { echo "cURL Error: " . curl_error($ch); } // 5. Release curl handle curl_close($ch); //Output content echo $output; ?> New to.php
The code is as follows Copy code

"; print_r($_POST); echo "

I'm come from http://www.bKjia.c0m" ?>


File upload

Uploading files is very similar to the previous POST, because all file upload forms are submitted through the POST method.

New from.php

The code is as follows Copy code
 代码如下 复制代码


header("Content-type: text/html; charset=utf-8");

// 待 post 的数据
$post_data = array (
"hyh" => "man",
    "upload" => "@C:/test.zip" // 要上传的本地文件地址
);

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); // 这里设置为post方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 添加准备post的数据

// 3. 执行并获取返回内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
    echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl资源
curl_close($ch);

// 输出内容
echo $output;
?>


 

header("Content-type: text/html; charset=utf-8");

代码如下 复制代码


header("Content-type: text/html; charset=utf-8");

print_r($_FILES);
?>

//Data to be posted
$post_data = array (

"hyh" => "man",

"upload" => "@C:/test.zip" // The address of the local file to be uploaded

);

// 1. Initialization

$ch = curl_init();

 代码如下 复制代码

 

header("Content-type: text/html; charset=utf-8");

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // 发送用户名和密码
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 你可以允许其重定向
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); // 让 cURL 在重定向后,也能发送用户名和密码

// 3. 执行并获取返回内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl句柄
curl_close($ch);
?>

// 2. Setting options curl_setopt($ch, CURLOPT_URL, "http://localhost/to.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); // Set to post mode here curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // Add data to prepare for post /// 3. Execute and get the returned content $output = curl_exec($ch); // 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs if ($output === FALSE) { echo "cURL Error: " . curl_error($ch); } // 5. Release curl resources curl_close($ch); //Output content echo $output; ?> New to.php:
The code is as follows Copy code
header("Content-type: text/html; charset=utf-8");<🎜> <🎜>print_r($_FILES);<🎜> ?>
If you need to upload a file, just pass the file path like a post variable, but remember to add the @ symbol in front. Some more useful cURL examples HTTP Authentication If a URL request requires HTTP-based authentication, you can use the following code:
The code is as follows Copy code
header("Content-type: text/html; charset=utf-8");<🎜> <🎜>// 1. Initialization<🎜> $ch = curl_init();<🎜> <🎜>// 2. Setting options<🎜> curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");<🎜> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<🎜> curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); // Send username and password<🎜> curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // You can allow redirection<🎜> curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); // Allow cURL to send username and password after redirection<🎜> <🎜>/// 3. Execute and get the returned content<🎜> $output = curl_exec($ch);<🎜> <🎜>// 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs <🎜> if ($output === FALSE) {<🎜> echo "cURL Error: " . curl_error($ch);<🎜> }<🎜> <🎜> // 5. Release curl handle <🎜> curl_close($ch);<🎜> ?>


FTP upload

PHP comes with its own FTP class library, but you can also use cURL. You can also refer to this article: PHP uses cURL to implement ftp upload

The code is as follows Copy code
 代码如下 复制代码

header("Content-type: text/html; charset=utf-8");

// 开一个文件指针
$file = fopen("/path/to/file", "r");

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "ftp://username:password@3aj.cn:21/path/to/new/file");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 上传相关的选项
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file"));
// 是否开启ASCII模式 (上传文本文件时有用)
curl_setopt($ch, CURLOPT_FTPASCII, 1);

// 3. 执行并获取返回内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl句柄
curl_close($ch);
?>


 

header("Content-type: text/html; charset=utf-8");

代码如下 复制代码

header("Content-type: text/html; charset=utf-8");

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080'); // 指定代理地址
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:pass'); // 如果需要的话,提供用户名和密码

// 3. 执行并获取返回内容
$output = curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl句柄
curl_close($ch);
?>


 

//Open a file pointer

$file = fopen("/path/to/file", "r");

// 1. Initialization
$ch = curl_init();

 代码如下 复制代码

 

header("Content-type: text/html; charset=utf-8");

// 1. 初始化
$ch = curl_init();

// 2. 设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_function");

// 3. 执行并获取返回内容
curl_exec($ch);

// 4. 错误判断,注意这里是布尔值,而不是空输出,所以是3个等号
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

// 5. 释放curl句柄
curl_close($ch);

// 回调函数
function progress_function($ch, $str) {
echo $str;
return strlen($str);
}
?>


 

// 2. Setting options curl_setopt($ch, CURLOPT_URL, "ftp://username:password@3aj.cn:21/path/to/new/file"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Upload related options curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); // Whether to enable ASCII mode (useful when uploading text files) curl_setopt($ch, CURLOPT_FTPASCII, 1); /// 3. Execute and get the returned content $output = curl_exec($ch); // 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs if ($output === FALSE) { echo "cURL Error: " . curl_error($ch); } // 5. Release curl handle curl_close($ch); ?> You can use a proxy to make cURL requests:
The code is as follows Copy code
header("Content-type: text/html; charset=utf-8");<🎜> <🎜>// 1. Initialization<🎜> $ch = curl_init();<🎜> <🎜>// 2. Setting options<🎜> curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");<🎜> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<🎜> curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080'); // Specify proxy address<🎜> curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:pass'); // Provide username and password if necessary <🎜> <🎜>/// 3. Execute and get the returned content<🎜> $output = curl_exec($ch);<🎜> <🎜>// 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs <🎜> if ($output === FALSE) {<🎜> echo "cURL Error: " . curl_error($ch);<🎜> }<🎜> <🎜>// 5. Release curl handle<🎜> curl_close($ch);<🎜> ?>
Callback function You can have cURL call a specified callback function during a URL request. For example, start utilizing data as soon as the content or response is downloading, rather than waiting until it is completely downloaded.
The code is as follows Copy code
header("Content-type: text/html; charset=utf-8");<🎜> <🎜>// 1. Initialization<🎜> $ch = curl_init();<🎜> <🎜>// 2. Setting options<🎜> curl_setopt($ch, CURLOPT_URL, "http://www.bKjia.c0m");<🎜> curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_function");<🎜> <🎜>/// 3. Execute and get the returned content<🎜> curl_exec($ch);<🎜> <🎜>// 4. Wrong judgment, please note that this is a Boolean value, not an empty output, so there are 3 equal signs <🎜> if ($output === FALSE) {<🎜> echo "cURL Error: " . curl_error($ch);<🎜> }<🎜> <🎜>// 5. Release curl handle<🎜> curl_close($ch);<🎜> <🎜>//Callback function<🎜> function progress_function($ch, $str) {<🎜> echo $str;<🎜> Return strlen($str);<🎜> }<🎜> ?>

This callback function must return the length of the string, otherwise this function will not work properly. During the process of receiving the URL response, this function will be called as long as a data packet is received.

After talking for a long time, let’s use cURL, an advanced and practical function, to implement ftp upload

Web server upload limit:

The default upload limit of PHP is 2M. If you want to upload files exceeding 2M, you must modify your PHP configuration or use the following code to create a .htaceess file.

The code is as follows Copy code
 代码如下 复制代码

php_value upload_max_filesize 16M
php_value post_max_size 20M

php_value upload_max_filesize 16M

php_value post_max_size 20M


The maximum file upload limit is set here to 16M, and the value of post_max_size is 20M, because we may also need the values ​​of other form items in the POST form while uploading files.

The created .htaccess should be placed in the same directory as your upload script.

Use cURL for file upload

cURL is a tool that uses URL syntax to transfer files and data. It supports many protocols, such as HTTP, FTP, TELNET, etc. It can complete many difficult tasks - such as handling cookies, verification, form submission, file upload, ftp upload, etc.

 代码如下 复制代码


   

       
       
       
   

Here, we are going to upload a file to the ftp space by using a web form. The ftp space here is password protected.
The code is as follows Copy code
                                

This form page is relatively simple and only has a file upload function.
Then we need the following php code to receive the uploaded file, use cURL to open a file stream and transfer it to the remote ftp server.

           $fp = fopen($localfile, 'r');          curl_setopt($ch, CURLOPT_URL, 'ftp://username:password@3aj.cn/'.$_FILES['upload']['name']);
The code is as follows
 代码如下 复制代码


if (isset($_POST['Submit'])) {
    if (!empty($_FILES['upload']['name'])) {
        $ch = curl_init();
        $localfile = $_FILES['upload']['tmp_name'];
        $fp = fopen($localfile, 'r');
        curl_setopt($ch, CURLOPT_URL, 'ftp://username:password@3aj.cn/'.$_FILES['upload']['name']);
        curl_setopt($ch, CURLOPT_UPLOAD, 1);
        curl_setopt($ch, CURLOPT_INFILE, $fp);
        curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
        curl_exec($ch);
        $error_no = curl_errno($ch);
        curl_close($ch);
        if ($error_no == 0) {
            $error = 'File uploaded succesfully.';
        } else {
            $error = 'File upload error.';
            echo "i come from ";
        }
    } else {
        $error = 'Please select a file.';
    }
}


 

Copy code


if (isset($_POST['Submit'])) {

If (!empty($_FILES['upload']['name'])) {

          $ch = curl_init();

          $localfile = $_FILES['upload']['tmp_name'];
curl_setopt($ch, CURLOPT_UPLOAD, 1);          curl_setopt($ch, CURLOPT_INFILE, $fp);

        curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));

         curl_exec($ch);          curl_close($ch);            if ($error_no == 0) {                 $error = 'File uploaded successfully.';          } else {                  $error = 'File upload error.'; echo "i come from "; } } else {           $error = 'Please select a file.'; } }
When the user selects and uploads a file, the file is first saved on the web server. We use fopen to open the temporary file and initialize a cURL session. In the sent URL, fill in the ftp account and password, and then Then set other necessary parameters of cURL. If the number of errors returned is 0, then the file was uploaded successfully. Summary Today we learned the powerful functions and flexible scalability of the cURL library. The original text was compiled from: 3a Tutorial Network http://www.bkjia.com/PHPjc/628616.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/628616.htmlTechArticleThe cURL function in php has a set of related functions. It is a very good function. We often use it to Imitating various login and collection tasks, let me introduce you to the introduction of CURL function...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn