curl實現GET、POST請求

  1 <?php
  2 
  3 /**
  4   * curl 模擬 GET 請求
  5    * @param string $url  請求的URL
  6    * @param bool|true $ssl  是否啓用 ssl證書驗證
  7    * @param array $headers  設置 HTTP 頭字段的數組,格式: array('Content-type: text/plain', 'Content-length: 100')
  8    * @return bool|mixed
  9   *
 10   */    
 11 function _requestGet($url, $ssl=true, $headers=array())
 12 {
 13     # curl完成初始化
 14     $curl = curl_init();
 15 
 16     # curl 選項設置
 17     curl_setopt($curl, CURLOPT_URL, $url); //須要獲取的URL地址
 18 
 19     $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36';
 20     curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);   # 在HTTP請求中包含一個"User-Agent: "頭的字符串,聲明用什麼瀏覽器來打開目標網頁
 21 
 22     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);     # TRUE 時將會根據服務器返回 HTTP 頭中的 "Location: " 重定向。
 23 
 24     curl_setopt($curl, CURLOPT_AUTOREFERER, true);        # TRUE 時將根據 Location: 重定向時,自動設置 header 中的Referer:信息。
 25 
 26     curl_setopt($curl, CURLOPT_TIMEOUT, 30);              # 設置超時時間
 27 
 28     curl_setopt($curl, CURLOPT_ENCODING, '');             
 29     # HTTP請求頭中"Accept-Encoding: "的值。 這使得可以解碼響應的內容。 支持的編碼有"identity","deflate"和"gzip"。若是爲空字符串"",會發送全部支持的編碼類型
 30 
 31     if($headers) {
 32             curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);  # 設置 HTTP 頭字段的數組。格式: array('Content-type: text/plain', 'Content-length: 100')
 33     }
 34 
 35     # SSL相關,https需開啓
 36     if ($ssl) {
 37         curl_setopt($curl, CURLOPT_CAINFO, '/cert/ca.crt');  # CA 證書地址
 38         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);    # 禁用後cURL將終止從服務端進行驗證
 39         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);        
 40         # 設置爲 1 是檢查服務器SSL證書中是否存在一個公用名;設置成 2,會檢查公用名是否存在,而且是否與提供的主機名匹配;0 爲不檢查名稱。 在生產環境中,這個值應該是 2(默認值)。
 41         # 公用名(Common Name)通常來說就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)
 42     }else {
 43         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);    # 禁用後cURL將終止從服務端進行驗證,默認爲 true
 44     }
 45 
 46     curl_setopt($curl, CURLOPT_HEADER, false);             # 是否處理響應頭,啓用時會將頭文件的信息做爲數據流輸出
 47 
 48     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);      # TRUE 將curl_exec()獲取的信息以字符串返回,而不是直接輸出。
 49 
 50     # 執行 curl 會話
 51     $response = curl_exec($curl);
 52 
 53     if (false === $response) {
 54         echo '<br>', curl_error($curl), '<br>';
 55         return false;
 56     }
 57     #關閉 curl會話
 58     curl_close($curl);
 59     return $response;
 60 }
 61 
 62 
 63 /**
 64   * curl 模擬 POST 請求
 65    * @param string $url  請求的URL
 66    * @param array $data  請求數據
 67    * @param bool|true $ssl  是否啓用 ssl證書驗證
 68    * @param array $headers  設置 HTTP 頭字段的數組,格式: array('Content-type: text/plain', 'Content-length: 100')
 69    * @return bool|mixed
 70   *
 71   */    
 72 function _requestPost($url, $data, $ssl=true, $headers=array())
 73 {
 74     # curl完成初始化
 75     $curl = curl_init();
 76 
 77     # curl 選項設置
 78     curl_setopt($curl, CURLOPT_URL, $url); //須要獲取的URL地址
 79 
 80     $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36';
 81     curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);   # 在HTTP請求中包含一個"User-Agent: "頭的字符串,聲明用什麼瀏覽器來打開目標網頁
 82 
 83     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);     # TRUE 時將會根據服務器返回 HTTP 頭中的 "Location: " 重定向。
 84 
 85     curl_setopt($curl, CURLOPT_AUTOREFERER, true);        # TRUE 時將根據 Location: 重定向時,自動設置 header 中的Referer:信息。
 86 
 87     curl_setopt($curl, CURLOPT_TIMEOUT, 30);              # 設置超時時間
 88 
 89     curl_setopt($curl, CURLOPT_ENCODING, '');             
 90     # HTTP請求頭中"Accept-Encoding: "的值。 這使得可以解碼響應的內容。 支持的編碼有"identity","deflate"和"gzip"。若是爲空字符串"",會發送全部支持的編碼類型
 91 
 92     if($headers) {
 93             curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);  # 設置 HTTP 頭字段的數組。格式: array('Content-type: text/plain', 'Content-length: 100')
 94     }
 95 
 96     # SSL相關,https需開啓
 97     if ($ssl) {
 98         curl_setopt($curl, CURLOPT_CAINFO, '/cert/ca.crt');  # CA 證書地址
 99         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);    # 禁用後cURL將終止從服務端進行驗證
100         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);        
101         # 設置爲 1 是檢查服務器SSL證書中是否存在一個公用名;設置成 2,會檢查公用名是否存在,而且是否與提供的主機名匹配;0 爲不檢查名稱。 在生產環境中,這個值應該是 2(默認值)。
102         # 公用名(Common Name)通常來說就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)
103     }else {
104         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);    # 禁用後cURL將終止從服務端進行驗證,默認爲 true
105     }
106 
107 
108     curl_setopt($curl, CURLOPT_POST, true);                # 是否爲POST請求
109 
110     curl_setopt($curl, CURLOPT_POSTFIELDS, $data);         # 處理請求數據,所有數據使用HTTP協議中的 "POST" 操做來發送
111 
112 
113     curl_setopt($curl, CURLOPT_HEADER, false);             # 是否處理響應頭,啓用時會將頭文件的信息做爲數據流輸出
114 
115     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);      # TRUE 將curl_exec()獲取的信息以字符串返回,而不是直接輸出。
116 
117     # 執行 curl 會話
118     $response = curl_exec($curl);
119 
120     if (false === $response) {
121         echo '<br>', curl_error($curl), '<br>';
122         return false;
123     }
124     #關閉 curl會話
125     curl_close($curl);
126     return $response;
127 }
相關文章
相關標籤/搜索