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

首頁 > 編程 > PHP > 正文

PHP模擬發送POST請求之四 加強file_get_contents()發送POST請求

2020-03-22 18:29:23
字體:
來源:轉載
供稿:網友
  • 使用了笨重fsockopen()方法后,我們開始在html' target='_blank'>PHP函數庫里尋找更簡單的方式來進行POST請求,這時,我們發現了PHP的文件函數也具有與遠程URL交互的功能。

    最簡單的是fopen()和fread()函數。

    $fp=fopen('http://localhost?query=query','r');$content=fread($fp,1024);echo $content;//輸出HTML文檔信息fclose($fp);

    然后是file_get_contents()函數:

    $content=file_get_contents('http://localhost?query=query');echo $content;//輸出HTML文檔信息

    但是,我們會發現,通這兩種方式我們只能通過GET方式發送信息并讀取網頁信息,而且,這兩種方式還面臨著超時,無法處理頭信息等問題。


    不過,我們仔細查看file_get_contents()的函數原型:

    stringfile_get_contents(string$filename[,bool$use_include_path[,resource$context[,int$offset[,int$maxlen]]]])

    我們發現它還有其他可選參數,我們可以通過這些參數的設置,在發送網頁請求的同時,POST出我們的數據,下面來解釋各個參數的意義。

    $filename:不用多說,填寫我們要訪問的URL字符串就行。 $use_include_path:是否使用文件之前include_path()設置的路徑,如果使用,在文件地址找不到時,會自動去include_path()設置的路徑去尋找,網頁地址中我們設置為false。 $context:環境上下文,resource類型,由函數stream_context_create()返回的context來設置,也是我們進行file_get_contents()函數擴展的重點,接下來再說。 $offset:讀取的內容相對文件開始內容的偏移字節,我們讀取網頁內容,要保證HTML文檔的完整性,所以可以設置為0或者不設置,默認為0。 $maxlen:顧名思義,是讀取文件的最大字節數,同offset我們不設置,讀取網頁的全部內容。

    通過file_get_contents發送POST請求的重點就在$context參數上面,我們用stream_context_create()函數設置上下文。

    stream_context_create()創建的上下文選項即可用于流(stream),也可用于文件系統(filesystem)。對于像file_get_contents()、file_put_contents()、readfile()直接使用文件名操作而沒有文件句柄的函數來說更有用。stream_context_create()增加header頭只是一部份功能,還可以定義代理、超時等。

    我們來看stream_context_create()函數的原型:

    resourcestream_context_create([array$options[,array$params]])

    我們看到,通過傳入設置數組用此函數來獲取一個資源類型的上下文選項。

    $context = stream_context_create(array(                     //傳入數組類型的$option參數    'http' => array(                              //以HTTP請求為鍵的設置數組        'method'  => 'POST',                         //設置請求方法為POST        'header'  => 'Content-type: application/x-www-form-urlencoded',//通過設置頭文件來設置POST數據格式        'content' => http_build_query($query_info),           //用http_build_query()方法將數組拼合成數據字符串        'timeout' => 20                              //設置請求的超時時間。    ) )); 

    設置好上下文,我們通過file_get_contents()函數進行POST數據提交。

    $results = file_get_contents('http://localhost', false, $context); 

    下面是POST請求的完整示例:

    $info=['eat'=>'2kg','run'=>'10km'] ;$url='http://localhost';$context = stream_context_create(array(      'http' => array(          'method' => 'POST',          'header' => 'Content-type:application/x-www-form-urlencoded',          'content' => html_build_query($info),          'timeout' => 20      )  ));  $result = file_get_contents($url, false, $context);

    如果您覺得本文對您有幫助,您可以找薦或關注我,另外,如果有什么問題,可以在下方留言討論,謝謝。

    PHP編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 新沂市| 浙江省| 曲松县| 潜江市| 慈溪市| 广灵县| 金乡县| 潍坊市| 浦北县| 郑州市| 信丰县| 镇沅| 获嘉县| 石门县| 化德县| 湘潭市| 泽州县| 东莞市| 南京市| 苏尼特右旗| 且末县| 望江县| 新昌县| 福清市| 皮山县| 略阳县| 青河县| 海阳市| 阜南县| 呼图壁县| 陆良县| 长汀县| 安阳市| 梁山县| 同德县| 阿克陶县| 洛南县| 芷江| 双城市| 招远市| 松滋市|