深入理解curl類,可用于模擬get,post和curl下載
更新時(shí)間:2013年06月08日 16:08:28 作者:
本篇文章是對curl類,可用于模擬get,post和curl下載進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
如下所示:
<?php
class Curl {
/*
* get 方式獲取訪問指定地址
* @param string url 要訪問的地址
* @param string cookie cookie的存放地址,沒有則不發(fā)送cookie
* @return string curl_exec()獲取的信息
* @author andy
**/
public function get( $url, $cookie='' )
{
// 初始化一個(gè)cURL會(huì)話
$curl = curl_init($url);
// 不顯示header信息
curl_setopt($curl, CURLOPT_HEADER, 0);
// 將 curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 使用自動(dòng)跳轉(zhuǎn)
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
if(!empty($cookie)) {
// 包含cookie數(shù)據(jù)的文件名,cookie文件的格式可以是Netscape格式,或者只是純HTTP頭部信息存入文件。
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
}
// 自動(dòng)設(shè)置Referer
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
// 執(zhí)行一個(gè)curl會(huì)話
$tmp = curl_exec($curl);
// 關(guān)閉curl會(huì)話
curl_close($curl);
return $tmp;
}
/*
* post 方式模擬請求指定地址
* @param string url 請求的指定地址
* @param array params 請求所帶的
* #patam string cookie cookie存放地址
* @return string curl_exec()獲取的信息
* @author andy
**/
public function post( $url, $params, $cookie )
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 對認(rèn)證證書來源的檢查,0表示阻止對證書的合法性的檢查。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// 從證書中檢查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
//模擬用戶使用的瀏覽器,在HTTP請求中包含一個(gè)”user-agent”頭的字符串。
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//發(fā)送一個(gè)常規(guī)的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
curl_setopt($curl, CURLOPT_POST, 1);
// 將 curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 使用自動(dòng)跳轉(zhuǎn)
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
// 自動(dòng)設(shè)置Referer
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
// Cookie地址
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
// 全部數(shù)據(jù)使用HTTP協(xié)議中的"POST"操作來發(fā)送。要發(fā)送文件,
// 在文件名前面加上@前綴并使用完整路徑。這個(gè)參數(shù)可以通過urlencoded后的字符串
// 類似'para1=val1¶2=val2&...'或使用一個(gè)以字段名為鍵值,字段數(shù)據(jù)為值的數(shù)組
// 如果value是一個(gè)數(shù)組,Content-Type頭將會(huì)被設(shè)置成multipart/form-data。
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* 遠(yuǎn)程下載
* @param string $remote 遠(yuǎn)程圖片地址
* @param string $local 本地保存的地址
* @param string $cookie cookie地址 可選參數(shù)由
* 于某些網(wǎng)站是需要cookie才能下載網(wǎng)站上的圖片的
* 所以需要加上cookie
* @return void
* @author andy
*/
public function reutersload($remote, $local, $cookie= '') {
$cp = curl_init($remote);
$fp = fopen($local,"w");
curl_setopt($cp, CURLOPT_FILE, $fp);
curl_setopt($cp, CURLOPT_HEADER, 0);
if($cookie != '') {
curl_setopt($cp, CURLOPT_COOKIEFILE, $cookie);
}
curl_exec($cp);
curl_close($cp);
fclose($fp);
}
}
復(fù)制代碼 代碼如下:
<?php
class Curl {
/*
* get 方式獲取訪問指定地址
* @param string url 要訪問的地址
* @param string cookie cookie的存放地址,沒有則不發(fā)送cookie
* @return string curl_exec()獲取的信息
* @author andy
**/
public function get( $url, $cookie='' )
{
// 初始化一個(gè)cURL會(huì)話
$curl = curl_init($url);
// 不顯示header信息
curl_setopt($curl, CURLOPT_HEADER, 0);
// 將 curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 使用自動(dòng)跳轉(zhuǎn)
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
if(!empty($cookie)) {
// 包含cookie數(shù)據(jù)的文件名,cookie文件的格式可以是Netscape格式,或者只是純HTTP頭部信息存入文件。
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
}
// 自動(dòng)設(shè)置Referer
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
// 執(zhí)行一個(gè)curl會(huì)話
$tmp = curl_exec($curl);
// 關(guān)閉curl會(huì)話
curl_close($curl);
return $tmp;
}
/*
* post 方式模擬請求指定地址
* @param string url 請求的指定地址
* @param array params 請求所帶的
* #patam string cookie cookie存放地址
* @return string curl_exec()獲取的信息
* @author andy
**/
public function post( $url, $params, $cookie )
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 對認(rèn)證證書來源的檢查,0表示阻止對證書的合法性的檢查。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// 從證書中檢查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
//模擬用戶使用的瀏覽器,在HTTP請求中包含一個(gè)”user-agent”頭的字符串。
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//發(fā)送一個(gè)常規(guī)的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
curl_setopt($curl, CURLOPT_POST, 1);
// 將 curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 使用自動(dòng)跳轉(zhuǎn)
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
// 自動(dòng)設(shè)置Referer
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
// Cookie地址
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
// 全部數(shù)據(jù)使用HTTP協(xié)議中的"POST"操作來發(fā)送。要發(fā)送文件,
// 在文件名前面加上@前綴并使用完整路徑。這個(gè)參數(shù)可以通過urlencoded后的字符串
// 類似'para1=val1¶2=val2&...'或使用一個(gè)以字段名為鍵值,字段數(shù)據(jù)為值的數(shù)組
// 如果value是一個(gè)數(shù)組,Content-Type頭將會(huì)被設(shè)置成multipart/form-data。
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* 遠(yuǎn)程下載
* @param string $remote 遠(yuǎn)程圖片地址
* @param string $local 本地保存的地址
* @param string $cookie cookie地址 可選參數(shù)由
* 于某些網(wǎng)站是需要cookie才能下載網(wǎng)站上的圖片的
* 所以需要加上cookie
* @return void
* @author andy
*/
public function reutersload($remote, $local, $cookie= '') {
$cp = curl_init($remote);
$fp = fopen($local,"w");
curl_setopt($cp, CURLOPT_FILE, $fp);
curl_setopt($cp, CURLOPT_HEADER, 0);
if($cookie != '') {
curl_setopt($cp, CURLOPT_COOKIEFILE, $cookie);
}
curl_exec($cp);
curl_close($cp);
fclose($fp);
}
}
相關(guān)文章
PHP實(shí)現(xiàn)對xml的增刪改查操作案例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)對xml的增刪改查操作,結(jié)合具體案例形式分析了php針對xml格式文件的增刪改查操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05
mysql_escape_string()函數(shù)用法分析
這篇文章主要介紹了mysql_escape_string()函數(shù)用法,結(jié)合實(shí)例形式講述了mysql_escape_string()函數(shù)的功能,并分析了mysql_escape_string的使用技巧與注意事項(xiàng),需要的朋友可以參考下2016-04-04
window+nginx+php環(huán)境配置 附配置搭配說明
官方并不建議你將Non Thread Safe 應(yīng)用于生產(chǎn)環(huán)境,所以我們選擇Thread Safe 版本的PHP來使用。2010-12-12
php性能優(yōu)化之不要在for循環(huán)中操作DB
這篇文章主要為大家介紹了php性能優(yōu)化之不要在for循環(huán)中操作DB示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
有關(guān)phpmailer的詳細(xì)介紹及使用方法
有關(guān)phpmailer的用法,有需要的朋友不妨參考下2013-01-01
PHP面向?qū)ο蠖鄳B(tài)性實(shí)現(xiàn)方法簡單示例
這篇文章主要介紹了PHP面向?qū)ο蠖鄳B(tài)性實(shí)現(xiàn)方法,簡單說明了面向?qū)ο蠖鄳B(tài)性的原理并結(jié)合具體實(shí)例給出了php實(shí)現(xiàn)多態(tài)性的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
php將fileterms函數(shù)返回的結(jié)果變成可讀的形式
php將fileterms函數(shù)返回的結(jié)果變成可讀的形式,如: rwx--rx--x2011-04-04
PHP單例模式模擬Java Bean實(shí)現(xiàn)方法示例
這篇文章主要介紹了PHP單例模式模擬Java Bean實(shí)現(xiàn)方法,涉及php面向?qū)ο蟪绦蛟O(shè)計(jì)相關(guān)操作技巧,需要的朋友可以參考下2018-12-12

