国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP中curlpost的用法及原理解析

2020-03-22 19:18:46
字體:
來源:轉載
供稿:網友
  • 1、首先說明一下,curl的百科解釋是:

    PHP[2]支持的由Daniel Stenberg創建的libcurl庫允許你與各種的服務器使用各種類型的協議進行連接和通訊。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap協議。libcurl同時也支持HTTPS認證、HTTP POST、HTTP PUT、 FTP 上傳(這個也能通過PHP的FTP擴展完成)、HTTP 基于表單的上傳、代理、cookies和用戶名+密碼的認證。PHP中使用cURL實現Get和Post請求的方法

    2、簡單來說,curl就是抓取頁面的升級版,即支持GET、POST等瀏覽器行為,從而可以達到一個模擬瀏覽器操作的目的。

    最簡單的一個模型就是如下圖所示的模型:


    就是初始化,配置,取頁面源代碼數據,關閉。一個非常簡單的例子如下所示:

    <?php //1.初始化,創建一個新cURL資源 $ch = curl_init(); //2.設置URL和相應的選項 curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/"); curl_setopt($ch, CURLOPT_HEADER, 0); //3.抓取URL并把它傳遞給瀏覽器 curl_exec($ch); //4.關閉cURL資源,并且釋放系統資源 curl_close($ch); ?>

    我們可以看到瀏覽器會輸出百度的頁面結果。我們繼續深入研究如何使用curl來達到一個模擬登陸的過程,也就是模擬post的過程。

    3、POST的過程比較復雜一些,但是原理和瀏覽器提交過程相同,簡單來說,就是利用curl直接將用戶名和密碼(或者其他相應的參數,這個根據post頁面具體討論)提交到post指向的處理頁面即可。過程如下圖:


    當然,我們可以看到過程幾乎一樣,只是在curl初始化之后,要生成一些列的post參數,然后再提交,等待返回數據。

    例子如下:

    <?php/** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://facebook.cn/restServer.php',$post_string); * IT部落格版權所有 http://www.itbuluoge.com *///設置POST值$post_string='memberName=123&password=456';//調用登陸函數echo request_by_curl('http://login.ddd.cn/index.php/action/UserLogin/referer/1', $post_string);//登陸函數function request_by_curl($remote_server, $post_string){	$cookie_jar = tempnam('./tmp','JSESSIONID');	    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $remote_server);    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta");    $data = curl_exec($ch);    curl_close($ch);    return $data;}?>

    注:例子親測有效,只是我把我自己測試的真實賬號修改了一下。

    上面的例子就可以顯示,我們可以成功或者失敗的返回數據。

    但是上面有一個問題,就是失效性,也就是我們僅僅登陸成功了登陸頁是沒有效果的,服務器不一定保持了我們的登陸狀態,所以如果我們直接取其他頁面的數據,網站又會給出未登錄提示,這里就需要設置一個cookie。

    4、cookie設置及登陸


    根據圖形,我們可以分兩步走,第一步模擬登陸并且設置cookie。第二步讀取cookie并且加載需穴ky"http://www.it165.net/qq/" target="_blank" html' target='_blank'>class="keylink">qq1x8K9uvO3w87KtcTSs8PmoaM8L3A+CjxwPs/Cw+a4+LP2suLK1LPJuaa1xMD919OhozwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;"><?php/** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://facebook.cn/restServer.php',$post_string); * IT部落格版權所有 http://www.itbuluoge.com *///設置POST值$post_string='memberName=fdsfs&password=ddd';//調用登陸函數request_by_curl('http://login.ddd.cn/index.php/action/UserLogin/referer/1', $post_string);//返回固定頁面數據echo request_url_data("http://user.ddd.cn/dispatcher.php/module/Personal/");//登陸函數function request_by_curl($remote_server, $post_string){ $cookie_jar = tempnam('./tmp','JSESSIONID'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta"); //設置文件讀取并提交的cookie路徑 curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt '); //保存 $data = curl_exec($ch); curl_close($ch); return $data;}function request_url_data($url){ //初始化,創建一個新cURL資源 $ch = curl_init(); //讀取cookie curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt '); //設置URL和相應的選項 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); //抓取URL并把它傳遞給瀏覽器 $data=curl_exec($ch); //關閉cURL資源,并且釋放系統資源 curl_close($ch);}?>
    根據結果,顯示成功。這里我的網址和相關參數全部修改了,讀者可以根據自己的需要做相應的修改。

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 鹤峰县| 阳江市| 措勤县| 磴口县| 托克逊县| 威宁| 萨迦县| 晋江市| 泗洪县| 民乐县| 卢氏县| 堆龙德庆县| 布拖县| 长顺县| 六枝特区| 安岳县| 方山县| 依安县| 南康市| 鹤岗市| 江孜县| 桑植县| 时尚| 扶风县| 高碑店市| 桂平市| 连山| 黔东| 满洲里市| 贵阳市| 中西区| 镇宁| 峨眉山市| 马山县| 南城县| 桐城市| 张家港市| 阳西县| 安宁市| 武山县| 大悟县|