1. 程式人生 > >PHP中使用CURL實現GET和POST請求(詳細)

PHP中使用CURL實現GET和POST請求(詳細)

一、什麼是CURL?

cURL 是一個利用URL語法規定來傳輸檔案和資料的工具,支援很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支援 cURL 庫。使用PHP的cURL庫可以簡單和有效地去抓網頁。你只需要執行一個指令碼,然後分析一下你所抓取的網頁,然後就可以以程式的方式得到你想要的資料了。無論是你想從從一個連結上取部分資料,或是取一個XML檔案並把其匯入資料庫,那怕就是簡單的獲取網頁內容,cURL 是一個功能強大的PHP庫。

二、CURL函式庫。

curl_close — 關閉一個curl會話
curl_copy_handle — 拷貝一個curl連線資源的所有內容和引數
curl_errno — 返回一個包含當前會話錯誤資訊的數字編號
curl_error — 返回一個包含當前會話錯誤資訊的字串
curl_exec — 執行一個curl會話
curl_getinfo — 獲取一個curl連線資源控制代碼的資訊
curl_init — 初始化一個curl會話
curl_multi_add_handle — 向curl批處理會話中新增單獨的curl控制代碼資源
curl_multi_close — 關閉一個批處理控制代碼資源
curl_multi_exec — 解析一個curl批處理控制代碼
curl_multi_getcontent — 返回獲取的輸出的文字流
curl_multi_info_read — 獲取當前解析的curl的相關傳輸資訊
curl_multi_init — 初始化一個curl批處理控制代碼資源
curl_multi_remove_handle — 移除curl批處理控制代碼資源中的某個控制代碼資源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be “selected”
curl_setopt_array — 以陣列的形式為一個curl設定會話引數
curl_setopt — 為一個curl設定會話引數
curl_version — 獲取curl相關的版本資訊

curl_init()函式的作用初始化一個curl會話,curl_init()函式唯一的一個引數是可選的,表示一個url地址。
curl_exec()函式的作用是執行一個curl會話,唯一的引數是curl_init()函式返回的控制代碼。
curl_close()函式的作用是關閉一個curl會話,唯一的引數是curl_init()函式返回的控制代碼。

三、PHP建立CURL請求的基本步驟

①:初始化

curl_init()

②:設定屬性

curl_setopt().有一長串cURL引數可供設定,它們能指定URL請求的各個細節。

③:執行並獲取結果

curl_exec()

④:釋放控制代碼

curl_close()

四、CURL實現GET和POST

①:GET方式實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    //初始化
    $curl = curl_init();
    //設定抓取的url
    curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
    //設定標頭檔案的資訊作為資料流輸出
    curl_setopt($curl, CURLOPT_HEADER, 1);
    //設定獲取的資訊以檔案流的形式返回,而不是直接輸出。
    
curl_setopt
($curl, CURLOPT_RETURNTRANSFER, 1);
    //執行命令
    $data = curl_exec($curl);
    //關閉URL請求
    curl_close($curl);
    //顯示獲得的資料
    print_r($data);
?>

執行結果:

image

②:POST方式實現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    //初始化
    $curl = curl_init();
    //設定抓取的url
    curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
    //設定標頭檔案的資訊作為資料流輸出
    curl_setopt($curl, CURLOPT_HEADER, 1);
    //設定獲取的資訊以檔案流的形式返回,而不是直接輸出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //設定post方式提交
    curl_setopt($curl, CURLOPT_POST, 1);
    //設定post資料
    $post_data = array(
        "username" => "coder",
        "password" => "12345"
        );
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    //執行命令
    $data = curl_exec($curl);
    //關閉URL請求
    curl_close($curl);
    //顯示獲得的資料
    print_r($data);
?>

③:如果獲得的資料時json格式的,使用json_decode函式解釋成陣列。

$output_array = json_decode($output,true);

如果使用json_decode($output)解析的話,將會得到object型別的資料。

五、我自己封裝的一個函式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 //引數1:訪問的URL,引數2:post資料(不填則為GET),引數3:提交的$cookies,引數4:是否返回$cookies
 function curl_request($url,$post='',$cookie='', $returnCookie=0){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        curl_setopt($curl, CURLOPT_REFERER, "http://XXX");
        if($post) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
        }
        if($cookie) {
            curl_setopt($curl, CURLOPT_COOKIE, $cookie);
        }
        curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        if (curl_errno($curl)) {
            return curl_error($curl);
        }
        curl_close($curl);
        if($returnCookie){
            list($header, $body) = explode("\r\n\r\n", $data, 2);
            preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
            $info['cookie']  = substr($matches[1][0], 1);
            $info['content'] = $body;
            return $info;
        }else{
            

相關推薦

PHP使用CURL實現GETPOST請求(詳細)

一、什麼是CURL? cURL 是一個利用URL語法規定來傳輸檔案和資料的工具,支援很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支援 cURL 庫。使用PHP的cURL庫可以簡單和有效地去抓網頁。你只需要執行一個指令碼,然後分析一下你所抓取的網頁,然

PHP使用CURL實現GETPOST請求

由於 protocol 對稱加密 即使 匯報 bst 接口 useragent 拷貝 一、什麽是CURL? cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。使用php的cURL

PHP使用cURL實現GetPost請求的方法

data print str close arr 設置 高級特性 post數據 decode cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。本文將介紹 cURL 的一些高級特

使用CURL實現GETPOST方式請求

 CURL請求,支援GET和POST兩種方式,預設為GET方式,如果傳第二個引數則為POST方式請求,設定了超時時間,避免程式卡死。  function getPost($url,$vars = ''){ $ch = curl_init();

PHP-curl實現GETPOST請求

PHP-curl實現GET或POST請求 經常用的二個函式,很容易獲取目標網站資料,http或https協議都支援,可根據具體需求附帶表單,cookie。 GET請求: /** * curl模擬get進行 http 或 https url請求(可選cookie) * stri

php使用cUrl方法 getpost請求

http log lds ray lan init foreach get方法 spa php使用curl方法,請確保已經開啟curl擴展。傳送門:http://www.cnblogs.com/wgq123/p/7450667.html /**Curl請求get方法 *@

封裝curlgetpost請求

else 請求 enc con code urn gpo sta url /** * GET 請求 * @param string $url */ function http_get($url){ $oCurl = curl_init(); if(s

利用Java實現GETPOST請求

三個類 Java建立代理連線物件 Java傳送Post請求 Java傳送Get請求 程式碼 Java建立代理連線物件 /** * 1.返回代理物件 * @param proxyIp * @param

使用AsyncHttpClient 實現getpost請求

AsyncHttpClient簡介: AsyncHttpClient庫 基於Apache的HttpClient框架,是一個非同步的httpClient, 所有的http請求都在子執行緒中,但是callback執行的執行緒和建立這個callback的執行緒是同一個(也即主執

PHP使用CURL實現模擬GETPOST請求,親測完美解決

//初始化 $curl = curl_init(); //設定抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //設定標頭檔案的資訊作為資料流輸出 curl_setopt($cur

CURL實現發送GetPost請求(PHP)

結果 基本 釋放 初始 常用 header 理解 介紹 今天 1.cURL介紹   cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。本文將介紹 cURL 的一些高級特性,以及

php-getpost請求

output class ray 工作日 打印 init print bsp clas 1.get請求 <?php //判斷20130101是否是工作日 //工作日對應結果為 0, 休息日對應結果為 1, 節假日對應的結果為 2; $url=‘http://www

C#GetPost請求的同步及異步方法

iter epo charset result string pty streambuf div httpget 在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest對象來對Get和Post的同步及異步請求進行封裝:

Http協議GETPOST請求方法的區別

出場 請求參數 底層 情況下 -type 過去 firefox url sym GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把參數包含在URL中,POST通過request body傳遞

Golanghttp請求設定cookieheader(包括GETPOST請求)

//http請求 func httpHandle(method, urlVal,data string) { client := &http.Client{} var req *http.Request if data == "" { urlArr := strings.Sp

ajaxgetpost請求

ajax中get請求五步走: 第一步:建立Ajax物件var xhr = createXhr(); 第二步:設定回撥函式  xhr.onreadystatechange = function() {} 第三步:初始化Ajax物件  xhr.open(‘get’,url

php CURL模擬GETPOST請求

/** * get * @param string $url 請求地址 */ function GetHttp($url){ // 關閉控制代碼 $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($curl, CURLOPT_URL, $url); curl_set

C#GetPost請求的同步及非同步方法

在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest物件來對Get和Post的同步及非同步請求進行封裝: 新建HttpRequestHelper類: public static class H

C++:C語言實現HTTP的GETPOST請求例程參考 C++:C語言實現HTTP的GETPOST請求

C++:C語言實現HTTP的GET和POST請求   閱讀目錄   HTTP請求和IP/TCP   實現GET請求   實現POST請求:   參考: 回到頂部

Node.jsGetPost請求

   對於HTTP請求來說,我們通常使用的是Get和Post,除此之外還有put,delete等,而對於get來說,比較lightweight,只是對字串的傳輸,它會被新增到URL地址裡,屬於URL的一部分;而對於Post來說,就顯得重了一些,它的資料以包的形式存在,除了可以