PHP网络编程
(1)通過訪問文件的方式訪問其他網站:
任何一個網站的url地址其實都是一該網頁文件的路徑,所以我們可以用打開文件的方式來打開網頁的文件。
之后我們可以將其內容寫入我們自己的文件中。以此方法我們可以將多個網站中我們感興趣的內容搜索并保存到我們自己的文檔中。
比如可以實行以下方法:
$url_list = file("http://www.baidu.com/");$demo_web = fopen("demo_web.php",'a');foreach($url_list as $one_list){fwrite($demo_web,$one_list); }fclose($url_list);?
(2)PHP對URL的解析:
URL的基本組成成分:協議名(scheme)、主機名(host)、端口號(port)、文件路徑(path)、查詢參數(query)
?
php可以使用parse_url()函數來解析url,將需要解析的url作為參數傳給這個函數,這個函數會將url變成數組。
該數組中各個鍵值名和所對應的意思就是我上面列的“基本成分”。
如:$demo = parse_url("http://www.example.com/index.php");
$demo['host']就是“www.example.com” ? ? ? ?$demo['path']就是index.php
?
(3)PHPsocket編程:
?socket運行的基本機制:
在服務器和客戶端上各建一個socket就可以進行通信了。
服務器端:服務器先初始化socket,之后綁定端口,再對端口進行監聽,最后調用accept先將服務器端的socket阻塞住,等待客戶端的socket連接。
客戶端:先初始化一個socket,之后連接到阻塞中服務器端socket,如果連接成功,則客戶端與服務器的連接就建立了。
客戶端發送數據請求,服務器端接收并處理請求,然后把回應數據發送到客戶端,客戶端讀取數據,最后關閉連接,這樣一次交互就結束了。
?
而在php中如果要打開一個socket,需要使用到fsockopen()函數。
fsockopen()函數的參數依次為:URL、端口號、一個存放錯誤編號的變量、一個存放錯誤信息字符串的變量、超時等待時間。(只有第一個參數為必須的)。
這個fsockopen()函數和fopen()函數類似,得到的都是一個文件指針,所以也可以使用fwrite()等操作文件的函數
在使用fsockopen()建立了連接后,則使用fwrite()函數向服務器寫入一些數據,如:
$fp = fsockopen("www.example.com",80,$errno,$errstr,30); if(!$fp){echo "連接失敗"; }else{$send = "HEAD /HTTP/1.1\r\n";$send .= "HOST: www.example.com\r\n";$send .= "CONNECTION: Close\r\n\r\n";fwrite($fp,$send);$data = fgets($fp,128); //檢索HTTP頭的128個字符串fclose($fp); //關閉socket //用explode函數將$data從空格處打散為兩個字符串,再由list函數將前一個字符串賦值給$response變量,將后面的字符串賦值給$code字符串。list($response,$code)= explode(' ',$data); }關于上面的代碼:
1、寫入$fp的$send字符串實際上是利用“一系列HTTP協議頭來啟動通信過程”,如“HEAD/HTTP/1.1\r\n”其中的HEAD就是請求類型,當然也可以用GET或POST來請求,而后面的\r\n只是為了滿足格式而已。(同理下面增加進$send的兩個字符串也都是HTTP協議頭)
2、通過fwrite發送HTTP報頭后,該$fp會返回自己的HTTP報頭,通過fgets()函數讀取其中的128個字符串,并賦值給$data,這個$data中的空格后面的字符串被賦給了$code。
而這個$code就是HTTP狀態碼,只有當這個狀態碼為200時,表示該URL為可用的,任何其他數值的狀態碼都表示存在問題。
?
(4)使用cURL:
cURL的作用是“模擬瀏覽器請求”,我們可以用cURL細化我們的http請求功能,而不僅僅是人工瀏覽一個頁面。
php可以通過shell_exec()及其他函數來調用cURL,甚至還有一套cURL類庫:libcurl,操作步驟如下:
1、以要訪問的URL作為參數,調用curl_init()來開始一個cURL事務
$cur = curl_init('www.example.com');該函數會返回該cURL事務的指針,我們接下來就是操作這個事務的指針。
2、接下來我們要多次調用curl_setopt()函數來設置該事務的選項(可設置的選項太多,在這不一一列舉了),語法如下:
curl_setopt($curl,"可設置的選項",value);3、設置完所有選項后,使用curl_exec()函數來執行該事務,將返回的數據賦給一個變量:
$result = curl_exec($curl);4、最后,關閉該鏈接:
curl_close($curl);?
下面列舉幾個常用的設置選項:
1、告訴cURL,如果發生錯誤,直接停止運行:
curl_setopt($curl,CURLOPT_FAILONERROR,1);2、設置超時時間:
curl_setopt($curl,CURLOAPT_TIMEOUT,5);3、設置cURL使用POST方法提交數據:
curl_setopt($curl,CURLOAPT_POST,1);4、設置POST提交的數據:
curl_setopt($curl,CURLOAPT_POSTFIELDS,'name=小明&age=12');(Tip:cURL工具還能夠傳送、接收cookie,處理文件上傳,通過SSL連接工作,處理FTP文件)
?
轉載于:https://www.cnblogs.com/red-code/p/5324133.html
總結
- 上一篇: linux pthread
- 下一篇: php pdo操作数据库