CURL ist eine sehr leistungsstarke Open-Source-Bibliothek, die viele Protokolle unterstützt, darunter HTTP, FTP, TELNET usw. Wir verwenden sie zum Senden von HTTP-Anfragen. Der Vorteil besteht darin, dass wir durch flexible Optionen verschiedene HTTP-Protokollparameter festlegen können und HTTPS unterstützt. CURL kann automatisch auswählen, ob der gesendete Inhalt verschlüsselt werden soll, je nachdem, ob das URL-Präfix „HTTP“ oder „HTTPS“ ist. Als nächstes stellt unsere chinesische PHP-Website Freunden CURL vor.
Freunde, die neu bei PHP sind, können zuerst die Website-bezogenen Kurse lesen: PHP-Einführungs-Tutorial eine Woche, um PHP zu lernen
Sie können sich entsprechende Video-Tutorials zur chinesischen PHP-Website ansehen: Dugu Jiujian (4)_PHP-Video-Tutorial
Der grundlegende Prozess der Verwendung von CURL zum Senden einer Anfrage
Die Verwendung der PHP-Erweiterung von CURL zum Senden einer HTTP-Anfrage umfasst im Allgemeinen die folgenden Schritte:
Initialisieren das Verbindungshandle;
CURL-Optionen festlegen;
Ausführen und die Ergebnisse abrufen;
Das VURL-Verbindungshandle freigeben.
Das folgende Programmfragment ist ein typischer Prozess der Verwendung von CURL zum Senden von HTTP
// 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.php.cn"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); if($output === FALSE ){ echo "CURL Error:".curl_error($ch); } // 4. 释放curl句柄 curl_close($ch);
Im obigen Code werden vier Funktionen verwendet
curl_init() und curl_close() bzw. Das Initialisieren der CURL-Verbindung und das Schließen der CURL-Verbindung sind relativ einfach.
curl_exec() führt eine CURL-Anfrage aus, die Funktion gibt die von der entsprechenden URL zurückgegebenen Daten zurück, ausgedrückt als string , um anzuzeigen, dass die Funktion zufrieden ist gibt FALSE zurück. Es ist zu beachten, dass das Gleichheitszeichen verwendet wird, um zu bestimmen, ob die Ausgabe FALSE ist. Dies dient der Unterscheidung zwischen der Rückgabe einer leeren Zeichenfolge und einem Fehler.
Die wichtigste Funktion in der CURL-Funktionsbibliothek ist curl_setopt(), die HTTP-Anfragen anpassen kann, indem sie von der CURL-Funktionsbibliothek definierte Optionen festlegt. Im obigen Codeausschnitt werden drei wichtige Optionen verwendet:
CURLOPT_URL gibt die angeforderte URL an.
CURLOPT_RETURNTRANSFER wird auf 1 gesetzt, um die spätere Ausführung anzuzeigen . Die Rückgabe der Funktion „curl_exec“ ist die Rückgabezeichenfolge der URL, anstatt die Rückgabezeichenfolge an die Standardausgabe weiterzuleiten und TRUE zurückzugeben HTTP-Header-Informationen werden zurückgegeben.
CURL bietet viele Optionen. Eine Liste aller von CURL unterstützten Optionen finden Sie im PHP-Handbuch.
Nachdem die Funktion „curl_exec()“ ausgeführt wurde, können Sie die Funktion „curl_getinfo()“ verwenden, um die relevanten Informationsausgaben der CURL-Anfrage abzurufen Der Code lautet wie folgt:
Im obigen Code gibt curl_getinfo ein assoziatives Array zurück, das die folgenden Daten enthält:
curl_exec($ch); $info = curl_getinfo($sh); echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';
url: Netzwerkadresse.
content_type: Inhaltskodierung.
http_code:
HTTP-Statuscoderequest_size: Die Größe der Anfrage.
filetime: die Zeit, zu der die Datei erstellt wurde.
ssl_verify_result: SSL-Verifizierungsergebnis.
redirect_count: Sprunganzahl.
total_time: insgesamt benötigte Zeit.
namelookup_time: DNS-Abfragezeit.
connect_time: Wartezeit für die Verbindung.
pretransfer_time: Vorbereitungszeit vor dem Transfer.
size_uplpad: Die Größe der hochgeladenen Daten.
size_download: Die Größe der heruntergeladenen Daten.
speed_download: Download-Geschwindigkeit.
speed_upload: Upload-Geschwindigkeit.
download_content_length: Die Länge des Download-Inhalts.
upload_content_length: Die Länge des hochgeladenen Inhalts.
starttransfer_time: Zeitplan für den Beginn des Transfers.
redirect_time: Umleitungszeit.
Die Funktion „curl_getinfo()“ verfügt außerdem über einen optionalen Parameter $opt, über den Sie einige Konstanten festlegen können, die dem Feld oben entsprechen. Wenn der zweite Parameter festgelegt ist, wird nur zurückgegeben angegebenen Informationen. Wenn $opt beispielsweise auf CURLINFO_TOTAL_TIME gesetzt ist, gibt die Funktion curl_getinfo() nur total_time zurück, also die Zeit, die für die gesamte Übertragung benötigt wird. Wenn Sie nur auf bestimmte Übertragungsinformationen achten müssen, ist das Setzen des Parameters $opt sinnvoll .
使用CURL发送GET请求
如何使用CURL来发送GET请求,发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。使用这个函数,结合CURL发送HTTP请求的一般流程,我们封闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:
** *@desc 封闭curl的调用接口,get的请求方式。 */ function doCurlGetRequest($url,$data,$timeout = 5){ if($curl == "" || $timeout <= 0){ return false; } $url = $url.'?'.http_bulid_query($data); $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout); return curl_exec($con); }
这个函数把使用http_build_query 拼装好的带GET参数的URL传给curl_init函数,然后使用CURL发送HTTP请求。
使用CURL发送POST请求
可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:
/** ** @desc 封装 curl 的调用接口,post的请求方式 **/ function doCurlPostRequest($url,$requestString,$timeout = 5){ if($url == '' || $requestString == '' || $timeout <=0){ return false; } $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_POSTFIELDS, $requestString); curl_setopt($con, CURLOPT_POST,true); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout); return curl_exec($con); }
上面代码中除了设置CURLOPT_POSTFIELDS外,我们还设置了CURL_POST为true,标识这个请求是一个POST请求。在POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可秀。
curl实现的扩展功能:
1、实现远程获取和采集内容
2、实现PHP 网页版的FTP上传下载
3、实现模拟登陆:去一个邮件系统,curl可以模拟cookies
4、实现接口对接(API),数据传输等:通过一个平台发送短信啊,抓取和传递所传输的信息。
5、实现模拟Cookie等:登陆的状态下才可以操作一些属性。
如何使用CURL功能:
默认情况加PHP是不支持CURL的,需要在php.ini中开启该功能
;extension=php_curl.dll前面的分号去掉
1 整个操作过程中第一步是用cur_init()函数进行初始化
$curl = curl_init(‘www.php.cn')
2.用curl_setopt()函数进行设置选项。
3.设置后,进行执行事务 curl_exec($curl);
4 最后关闭curl_close();
使用PHP CURL实现传输和获取功能(post传输方式):获取远程网页数据
$user = "admin"; $pass = "admin"; $curlPost = "user=$user&pass=$pass"; $ch = curl_init(); //初始化一个CURL对象 curl_setopt($ch, CURLOPT_URL, "http://localhost/edu/login.php"); //设置你所需要抓取的URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); //设置curl参数,要求结果是否输出到屏幕上,为true的时候是不返回到网页中 假设上面的0换成1的话,那么接下来的$data就需要echo一下。 curl_setopt($ch, CURLOPT_POST, 1); //post提交 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch); //运行curl,请求网页。 curl_close($ch); [/code]
实现远程模拟登陆最基础部分。
curl也还是需要配置用户名和密码的,只不过是被浏览器隐藏了。
============================================================================
curl模拟登陆
模拟登陆:就是不登陆到php的论坛,也能查看到相应的信息。
分析登陆字段--->登陆后保留cookie状-->读取cookie并跳转到相关页-->抓取数
1、模拟登陆后创建一个文件保存cookie内容
2、通过读取生成的cookie内容模拟用户登陆状态
3、到相关页面获取所需内容
tempname创建一个临时文件
tempnam() 函数创建一个具有唯一文件名的临时文件。 若成功,则该函数返回新的临时文件名。若失败,则返回 false。
tempnam(dir,prefix)
参数 描述
dir 必需。规定创建临时文件的目录。
prefix 必需。规定文件名的开头。
相当于,fopen fwirte fclose
它可以返回一个布尔值。使用第三方来登陆你的QQ、msn是很危险的,因为它可以记录你的登录状态,抓取你的用户名和密码。
使用CURL模拟登陆到PHP论坛
1、分析登陆所需input框字段名和所需字段数量
2、保存cookie 模拟登陆后获取会员金币数量
代码:
//初始化一个 cURL 对象 $curl = curl_init(); //设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, " http://www.php.cn"); //设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); //运行cURL,请求网页 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); $user = "admin"; $pass = "admin100"; $curlPost = "user=$user&pass=$pass"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, " http://localhost/curl/login.php "); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch); curl_close($ch); ?> if($_POST['user']=="admin"){ echo ""; }else{ echo ""; } //print_r($_POST); ?>
相关内容推荐: