php使用curl模擬post請求

廢話很少說,直接上代碼,作個筆記。php

$url="http://localhost/header_server.php"; $body = array("mobile"=>"13899999999", "username"=>"Nick"); $header = array("Content-Type:multipart/x-www-form-urlencoded", "token:test", "client:h5");
$result = curlPost($url, $body, 5, $header, 'json'); var_dump($result); /** * 傳入數組進行HTTP POST請求 */
function curlPost($url, $post_data = array(), $timeout = 5, $header = "", $data_type = "") { $header = empty($header) ? '' : $header; //支持json數據數據提交
    if($data_type == 'json'){ $post_string = json_encode($post_data); }elseif($data_type == 'array') { $post_string = $post_data; }elseif(is_array($post_data)){ $post_string = http_build_query($post_data, '', '&'); } $ch = curl_init();    // 啓動一個CURL會話
    curl_setopt($ch, CURLOPT_URL, $url);     // 要訪問的地址
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // 對認證證書來源的檢查 // https請求 不驗證證書和hosts
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 從證書中檢查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器 //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 //curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
    curl_setopt($ch, CURLOPT_POST, true); // 發送一個常規的Post請求
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);     // Post提交的數據包
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);     // 設置超時限制防止死循環
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // 獲取的信息以文件流的形式返回 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模擬的header頭
    $result = curl_exec($ch); // 打印請求的header信息 //$a = curl_getinfo($ch); //var_dump($a);
 curl_close($ch); return $result; }

 幾點經驗:算法

1. 無論"Content-Type:multipart/form-data"仍是"Content-Type:application/x-www-form-urlencoded"只要採用post方式發送數據,而且在body體中的數據是數組格式,那麼在接收端就可使用$_POST獲取到。
2. 在接收端使用file_get_contents("php://input")接收時,只能獲取到字符串類型的body體數據。
3. 請求時,在header中添加的參數xxx,在接收端可使用$_SERVER["HTTP_XXX"]進行獲取。
相關文章
相關標籤/搜索