欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的方法總結(jié)

 更新時(shí)間:2022年06月27日 14:30:18   作者:PHP開(kāi)源社區(qū)  
對(duì)于php發(fā)送網(wǎng)絡(luò)請(qǐng)求,我們最常用的請(qǐng)求就是curl,有時(shí)我們也會(huì)用到file_get_contents函數(shù)發(fā)送網(wǎng)絡(luò)請(qǐng)求。本文為大家總結(jié)了php實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的方法及函數(shù),感興趣的可以學(xué)習(xí)一下

一、分析php發(fā)送網(wǎng)網(wǎng)絡(luò)請(qǐng)求的方法

對(duì)于php發(fā)送網(wǎng)絡(luò)請(qǐng)求,我們最常用的請(qǐng)求就是curl,有時(shí)我們也會(huì)用到file_get_contents函數(shù)發(fā)送網(wǎng)絡(luò)請(qǐng)求,但file_get_contents只能完成一些間單的網(wǎng)絡(luò)請(qǐng)求,稍復(fù)雜的就無(wú)法完成,例如文件上傳,cookies,驗(yàn)證,表單提交等,用php的curl可以使用URL的語(yǔ)法模擬瀏覽器來(lái)傳輸數(shù)據(jù),因?yàn)樗悄M瀏覽器,因此它同樣支持多種協(xié)議,F(xiàn)TP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等協(xié)議都可以很好的支持,包括一些:HTTPS認(rèn)證,HTTP POST方法,HTTP PUT方法,F(xiàn)TP上傳,keyberos認(rèn)證,HTTP上傳,代理服務(wù)器,cookies,用戶名/密碼認(rèn)證,下載文件斷點(diǎn)續(xù)傳,上傳文件斷點(diǎn)續(xù)傳,http代理服務(wù)器管道,甚至它還支持IPv6,scoket5代理服務(wù)器,通過(guò)http代理服務(wù)器上傳文件到FTP服務(wù)器等等,所以我們?cè)陂_(kāi)發(fā)中盡量用curl發(fā)網(wǎng)絡(luò)請(qǐng)求,無(wú)論是簡(jiǎn)單還是復(fù)雜

二、file_get_contents發(fā)送網(wǎng)絡(luò)請(qǐng)求示例

file_get_contents(path,include_path,context,start,max_length)

一般用file_get_contents或者fopen, file , readfile等函數(shù)讀取url的時(shí)候 會(huì)創(chuàng)建一個(gè)$http_response_header變量保存HTTP響應(yīng)的報(bào)頭,使用fopen等函數(shù)打開(kāi)的數(shù)據(jù)流信息可以用stream_get_meta_data獲取

$html = file_get_contents('http://www.baidu.com');
print_r($http_response_header);
$fp = fopen('http://www.baidu.com', 'r');
print_r(stream_get_meta_data($fp));
fclose($fp);

摸擬post請(qǐng)求:

$url = 'http://192.168.1.1/test.php';
$data = array(
    'keyword' => 'test data',
);
$content = http_build_query($data);
$content_length = strlen($content);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' =>
        "Content-type: application/x-www-form-urlencoded\r\n" .
        "Content-length: $content_length\r\n",
        'content' => $content
    )
);
echo file_get_contents($url, false, stream_context_create($options));

三、php 用curl發(fā)送網(wǎng)絡(luò)請(qǐng)求

curl可以支持https認(rèn)證、http post、ftp上傳、代理、cookies、簡(jiǎn)單口令認(rèn)證等等功能,使用前需要先在你的PHP環(huán)境中安裝和啟用curl模塊,這里有兩種寫法供大家參考:

<?php
function geturl($url){
        $headerArray =array("Content-type:application/json;","Accept:application/json");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        $output = json_decode($output,true);
        return $output;
}
 
 
function posturl($url,$data){
        $data  = json_encode($data);    
        $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json");
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output,true);
}
 
 
function puturl($url,$data){
    $data = json_encode($data);
    $ch = curl_init(); //初始化CURL句柄 
    curl_setopt($ch, CURLOPT_URL, $url); //設(shè)置請(qǐng)求的URL
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //設(shè)為TRUE把curl_exec()結(jié)果轉(zhuǎn)化為字串,而不是直接輸出 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"PUT"); //設(shè)置請(qǐng)求方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//設(shè)置提交的字符串
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output,true);
}
 
function delurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$put_url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");   
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output,true);
}
 
function patchurl($url,$data){
    $data  = json_encode($data);
    $ch = curl_init();
    curl_setopt ($ch,CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PATCH");  
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);     //20170611修改接口,用/id的方式傳遞,直接寫在url中了
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output);
    return $output;
}
?>

一個(gè)函數(shù)片時(shí)各種請(qǐng)求:

function sendCurl($url, $data = null,$method='POST')
{
    $method=strtoupper($method);
    $start_wdmcurl_time = microtime(true);
 
    $header = array(' application/x-www-form-urlencoded');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    // https 請(qǐng)求
    if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https")
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    if($method=='GET'){
        if($data && is_array($data) && count($data)>0 ){
            $url.="?".http_build_query($data);
        }
        curl_setopt($ch, CURLOPT_URL, $url);
    }elseif($method=='POST'){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        if (is_array($data) && count($data)>0)
        {
            curl_setopt($ch, CURLOPT_POST, true);
            $isPostMultipart = false;
            foreach ($data as $k => $v)
            {
                if ('@' == substr($v, 0, 1))
                {
                    $isPostMultipart = true;
                    break;
                }
            }
            unset($k, $v);
            if ($isPostMultipart) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            } else {
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
            }
        }
    }elseif(in_array($method,['PUT','DELETE','PATCH'])){
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,$method);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    $reponse = curl_exec($ch);
    curl_close($ch);
    return $reponse;
}

四、使用php composer的擴(kuò)展guzzlehttp

composer require guzzlehttp/guzzle
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
 
echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
 
// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});
 
$promise->wait();

日常開(kāi)發(fā)中我們盡量用方法三,自定義用curl處理網(wǎng)絡(luò)請(qǐng)求,或用composer的guzzlehttp擴(kuò)展庫(kù),有起來(lái)也很方便。

以上就是PHP實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的方法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于PHP網(wǎng)絡(luò)請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論