PHP擴展功能----cURL


一、入門三部曲

1、cURL是什么?

wikipedia介紹

* cURL是一個利用URL語法在命令行下工作的文件傳輸工具,1997年首次發行。它支持文件上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱cURL為下載工具。cURL還包含了用於程序開發的libcurl。
* cURL支持的通信協議有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
* libcurl支持的平台有Solaris、NetBSD、FreeBSD、OpenBSD、Darwin、HP-UX、IRIX、AIX、Tru64、Linux、UnixWare、HURD、Windows、Symbian、Amiga、OS/2、BeOS、Mac OS X、Ultrix、QNX、BlackBerry Tablet OS、OpenVMS、RISC OS、Novell NetWare、DOS等。

簡而言之:cURL是下載工具、傳輸工具。利用url的語法規則傳輸文件、數據的命令行工具和庫。

2、為什么要用cURL?

通常是通過表單(html)提交數據到php文件從而實現數據的交互,但是不能實現php文件之間的數據和文件傳輸,
所以,cURL的應用場景主要是php文件之間的數據和文件傳輸。

3、在PHP中怎么用cURL?

(1)php.ini中開啟curl擴展

extension=php_curl.dll

然后重啟apache

(2)在phpinfo()的輸出信息中查看是否有curl的相關信息
avatar

【注】:如果開啟無效,可以嘗試將php安裝目錄下的libeay32.dll 、ssleay32.dll拷貝到windows 或 windows/system32目錄下

二、cURL在PHP中的應用

必備函數:

(1)curl_init() --- 初始化 cURL 會話

(2)curl_setopt() --- 設置 cURL 傳輸選項

參數:

  • post方式:

    • CURLOPT_POST
    • CURLOPT_POSTFIELDS
  • get方式:

    • CURLOPT_RETURNTRANSFER
    • CURLOPT_SSL_VERIFYHOST
  • 安全驗證:

    • CURLOPT_SSL_VERIFYPEER
    • CURLOPT_SSL_VERIFYPEER

(3)curl_exec(); --- 執行 cURL 會話

(4)curl_close() --- 關閉 cURL 會話

1、模擬get請求

(1)默認是直接顯示返回的數據,對於html數據,則直接以網頁的形式顯示。

//1、初始化curl
$curl = curl_init();

//2、告訴curl,請求的地址
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/index.php');

//3、發送請求
curl_exec($curl);

//4、關閉資源
curl_close($curl);

(2)設置只獲取數據,不直接顯示

//1、初始化curl
$curl = curl_init();

//2、告訴curl,請求的地址
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/index.php');
//將請求的數據返回,而不是直接輸出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

//3、發送請求
$res = curl_exec($curl);
var_dump($res);

//4、關閉資源
curl_close($curl);

2、模擬post請求

1、初始化curl
$curl = curl_init();

//2、設置請求的地址
curl_setopt($curl, CURLOPT_URL, 'http://localhost/curl_post.php');
// (1)設置請求的方式為post
curl_setopt($curl, CURLOPT_POST, true);
// (2)設置post提交的數據
$data = [
	'username' => 'zqunor',
	'password' => 'zqunor123'
];
// (3)提交數據
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

//3、發送請求
curl_exec($curl);

//4、關閉資源
curl_close($curl);

3、封裝成類,兼容post和get方式

class HttpRequest
{
	private static $isShow = false;

	public function __set($attr, $value)
	{
		$this->$attr = $value;
	}

	public static function send($url,$data=null)
	{
		$curl = curl_init();
		// 設置請求的url地址
		curl_setopt($curl, CURLOPT_URL, $url);

		// 直接跳過安全證書的驗證
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

		// 根據$data判斷是post還是get方式			
		if (!empty($data)) {
			// 如果$data非空,則為post方式
			curl_setopt($curl, CURLOPT_POST, true);
			curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		}
		// 反之為get方式
		if (!self::$isShow) {
			// 不直接顯示數據,而是以返回值的形式
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, $url);
		}
		$res = curl_exec($curl);
		return $res;

		curl_close($curl);
	}
}

4、實例化進行數據獲取

// 調用封裝的類,請求知乎php話題下的數據
$res = HttpRequest::send('https://www.zhihu.com/search?type=content&q=php');

// 查看需要獲取的數據的html樣式
// <a target="_blank" href="/question/26498147/answer/33029411" data-reactid="218"><span class="Highlight" data-reactid="219">「<em>PHP</em> 是最好的語言」這個梗是怎么來的?</span></a>
// <a target="_blank" href="/question/41913568/answer/95778872" data-reactid="366"><span class="Highlight" data-reactid="367">如何看待天貓徹底拋棄<em>PHP</em>?</span></a>
// <a target="_blank" href="/question/25038841/answer/44396770" data-reactid="292"><span class="Highlight" data-reactid="293"><em>PHP</em>、Java、Python、C、C++ 這幾種編程語言都各有什么特點或優點?</span></a>

// 根據樣式設置正則匹配模式,篩選所需數據
$reg = '/<a[^>]*><span class="Highlight"[^>]*>(.+?)<\/span><\/a>/';

preg_match_all($reg, $res, $match);

var_dump($match);

5、查看匹配結果

avatar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM