转载

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

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

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

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

  1. // 获取评论次数,参数是文章ID  
  2. function  getCommCount( $postid ) 
  3. { 
  4.      $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' ]; 
  5. } 

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

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...