方法1: 用file_get_contents 以get方式獲取內容:
<?php $url='http://www.bkjia.com/'; $html = file_get_contents($url); echo $html; ?>
方法2: 用fopen打開url, 以get方式獲取內容:
<?php $fp = fopen($url, ‘r'); stream_get_meta_data($fp); while(!feof($fp)) { $result .= fgets($fp, 1024); } echo “url body: $result”; fclose($fp); ?>
方法3:用file_get_contents函數,以post方式獲取url
<?php $data = array (‘foo' => ‘bar'); $data = http_build_query($data); $opts = array ( ‘http' => array ( ‘method' => ‘POST', ‘header'=> “Content-type: application/x-www-form-urlencodedrn” . “Content-Length: ” . strlen($data) . “rn”, ‘content' => $data ) ); $context = stream_context_create($opts); $html = file_get_contents(‘http://localhost/e/admin/test.html', false, $context); echo $html; ?>
方法4:用fsockopen函數打開url,以get方式獲取完整的數據,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 選項開啟
<?php function get_url ($url,$cookie=false) { $url = parse_url($url); $query = $url[path].”?”.$url[query]; echo “Query:”.$query; $fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30); if (!$fp) { return false; } else { $request = “GET $query HTTP/1.1rn”; $request .= “Host: $url[host]rn”; $request .= “Connection: Closern”; if($cookie) $request.=”Cookie: $cookien”; $request.=”rn”; fwrite($fp,$request); while(!@feof($fp)) { $result .= @fgets($fp, 1024); } fclose($fp); return $result; } } //獲取url的html部分,去掉header function GetUrlHTML($url,$cookie=false) { $rowdata = get_url($url,$cookie); if($rowdata) { $body= stristr($rowdata,”rnrn”); $body=substr($body,4,strlen($body)); return $body; } return false; } ?>
方法5:用fsockopen函數打開url,以POST方式獲取完整的數據,包括header和body
<?php function HTTP_Post($URL,$data,$cookie, $referrer=”") { // parsing the given URL $URL_Info=parse_url($URL); // Building referrer if($referrer==”") // if not given use this script as referrer $referrer=”111″; // making string from $data foreach($data as $key=>$value) $values[]=”$key=”.urlencode($value); $data_string=implode(“&”,$values); // Find out which port is needed – if not given use standard (=80) if(!isset($URL_Info["port"])) $URL_Info["port"]=80; // building POST-request: $request.=”POST “.$URL_Info["path"].” HTTP/1.1n”; $request.=”Host: “.$URL_Info["host"].”n”; $request.=”Referer: $referern”; $request.=”Content-type: application/x-www-form-urlencodedn”; $request.=”Content-length: “.strlen($data_string).”n”; $request.=”Connection: closen”; $request.=”Cookie: $cookien”; $request.=”n”; $request.=$data_string.”n”; $fp = fsockopen($URL_Info["host"],$URL_Info["port"]); fputs($fp, $request); while(!feof($fp)) { $result .= fgets($fp, 1024); } fclose($fp); return $result; } ?>
方法6:使用curl庫,使用curl庫之前,可能需要查看一下php.ini是否已經打開了curl擴展
<?php $ch = curl_init(); $timeout = 5; curl_setopt ($ch, CURLOPT_URL, ‘http://www.bkjia.com/'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); echo $file_contents; ?>
Http之Get/Post請求區別
1.HTTP請求格式:
<request line>
<headers>
<blank line>
[<request-body>]
在HTTP請求中,第一行必須是一個請求行(request line),用來說明請求類型、要訪問的資源以及使用的HTTP版本。緊接著是一個首部(header)小節,用來說明服務器要使用的附加信息。在首部之後是一個空行,再此之後可以添加任意的其他數據[稱之為主體(body)]。
1. get是從服務器上獲取數據,post是向服務器傳送數據。
get 和 post只是一種傳遞數據的方式,get也可以把數據傳到服務器,他們的本質都是發送請求和接收結果。只是組織格式和數據量上面有差別,http協議裡面有介紹
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
因為get設計成傳輸小數據,而且最好是不修改服務器的數據,所以浏覽器一般都在地址欄裡面可以看到,但post一般都用來傳遞大數據,或比較隱私的數據,所以在地址欄看不到,能不能看到不是協議規定,是浏覽器規定的。
3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
沒明白,怎麼獲得變量和你的服務器有關,和get或post無關,服務器都對這些請求做了封裝
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
post基本沒有限制,我想大家都上傳過文件,都是用post方式的。只不過要修改form裡面的那個type參數
5. get安全性非常低,post安全性較高。
如果沒有加密,他們安全級別都是一樣的,隨便一個監聽器都可以把所有的數據監聽到,不信你自己下一個監聽網絡資源的軟件,
Get是向服務器發索取數據的一種請求,而Post是向服務器提交數據的一種請求,在FORM(表單)中,Method默認為"GET",實質上,GET和POST只是發送機制不同,並不是一個取一個發!
Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認為:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查,改,增,刪4個操作。到這裡,大家應該有個大概的了解了,GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息。
1.根據HTTP規范,GET用於信息獲取,而且應該是安全的和冪等的。
(1).所謂安全的意味著該操作用於獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。就是說,它僅僅是獲取資源信息,就像數據庫查詢一樣,不會修改,增加數據,不會影響資源的狀態。
* 注意:這裡安全的含義僅僅是指是非修改信息。
(2).冪等的意味著對同一URL的多個請求應該返回同樣的結果。這裡我再解釋一下冪等這個概念:
冪等(idempote......余下全文>>
把HTTP/1.1改為HTTP/1.0
$results=fgets($fp,1024);
$contents = substr($results,strpos($results,"\r\n\r\n")+4); //去掉請求返回的頭部
$header=substr($results,0,strpos($results,"\r\n\r\n")+1); //相應的頭信息
具體應該是這樣,其實這種用socket實現的PHP的http類(模擬post或get)
可以參考下
www.wenlingnet.com/archives/2009/12/05/67.html