转载

PHP:6种GET和POST请求发送方法

PHP:6种GET和POST请求发送方法

在 i94web 博客中,我试过了畅言和多说两种社会化评论框,后来还是抛弃了畅言,不安全。

无论是畅言还是多说,我都需要从远程抓取文章的评论数,然后存入本地数据库。对于多说,请求的格式如下:

  1. // 获取评论次数,参数是文章ID  
  2. function  getCommCount( $postid
  3.      $jsondata  =  file_get_contents ( "http://api.duoshuo.com/threads/counts.json?short_name=i94web&threads=$postid" ); // 设置true返回数组,不设置或者是false则返回对象  $resjson = json_decode( $jsondata ,true);  return   $resjson [ 'response' ][ $postid ][ 'comments' ]; 

对于远程请求,有很多种方法。今天,LZ就搜罗了六种,供大家参考。

1、用file_get_contents 以get方式获取内容:

  1. <?php 
  2. $url = 'http://www.ido321.com/'
  3. $html  =  file_get_contents ( $url ); 
  4. echo   $html
  5. ?>

2、用fopen打开url,用get方式获取

  1. $fp  =  fopen ( $url 'r' ); 
  2. stream_get_meta_data( $fp ); 
  3. while (! feof ( $fp )) { 
  4. $result  .=  fgets ( $fp , 1024); 
  5. echo   "url body: $result"
  6. fclose( $fp );

3、用file_get_contents 以post方式获取内容:

  1. $data = array ( 'foo'  =>  'bar' ); 
  2. $data = http_build_query($data); 
  3. $opts = array ( 
  4. 'http'  => array ( 
  5. 'method'  =>  'POST'
  6. '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 选项开启

  1. function  get_url ( $url , $cookie =false) 
  2. $url  =  parse_url ( $url ); 
  3. $query  =  $url [path]. '?' . $url [query]; 
  4. echo   'Query:' . $query
  5. $fp  =  fsockopen $url [host],  $url [port]? $url [port]:80 ,  $errno $errstr , 30); 
  6. if  (! $fp ) { 
  7. return  false; 
  8. else  { 
  9. $request  =  'GET $query HTTP/1.1rn'
  10. $request  .=  'Host: $url[host]rn'
  11. $request  .=  'Connection: Closern'
  12. if ( $cookie $request .= 'Cookie:  $cookien'
  13. $request .= 'rn'
  14. fwrite( $fp , $request ); 
  15. while (!@ feof ( $fp )) { 
  16. $result  .= @ fgets ( $fp , 1024); 
  17. fclose( $fp ); 
  18. return   $result
  19. //获取url的html部分,去掉header  
  20. function  GetUrlHTML( $url , $cookie =false) 
  21. $rowdata  = get_url( $url , $cookie ); 
  22. if ( $rowdata
  23. $body stristr ( $rowdata , 'rnrn' ); 
  24. $body = substr ( $body ,4, strlen ( $body )); 
  25. return   $body
  26.  
  27. return  false; 
  28. }
5、 用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
  1. function  HTTP_Post( $URL , $data , $cookie $referrer = ''
  2. // parsing the given URL  
  3. $URL_Info = parse_url ( $URL ); 
  4.  
  5. // Building referrer  
  6. if ( $referrer == '' // if not given use this script as referrer  
  7. $referrer = '111'
  8.  
  9. // making string from $data  
  10. foreach ( $data   as   $key => $value
  11. $values []= '$key=' .urlencode( $value ); 
  12. $data_string =implode( '&' , $values ); 
  13.  
  14. // Find out which port is needed – if not given use standard (=80)  
  15. if (!isset( $URL_Info [ 'port' ])) 
  16. $URL_Info [ 'port' ]=80; 
  17.  
  18. // building POST-request:  
  19. $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扩展

  1. $ch  = curl_init(); 
  2. $timeout  = 5; 
  3. curl_setopt ( $ch , CURLOPT_URL, ‘http: //www.ido321.com/');  
  4. curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1); 
  5. curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT,  $timeout ); 
  6. $file_contents  = curl_exec( $ch ); 
  7. curl_close( $ch ); 
  8. echo   $file_contents
正文到此结束
Loading...