码迷,mamicode.com
首页 > Web开发 > 详细

php 发送post、get请求的三种方式

时间:2015-11-18 00:52:18      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

    // 发送post请求
    // @param string $url 请求地址
    // @param array $post_data post键值对数据
    // @return string
    function sendPost($url, $post_data){
      
        // http_build_query()
        // 生成URL-encode之后的请求字符串
        // 
        // 备注:
        // php5.3的分隔符用的是&,如果目标服务器也是php5.3,那么就不会出错。
        // 但是如果目标服务器是java的tomcat或者别的,那么&可能就会处理错误。
        // 以下的形式能够避免错误
        // http_build_query($post_data, ‘‘, ‘&‘);
        
        // stream_context_create()
        // 创建并返回一个流的资源
        
       $username=‘username‘;
        $password=‘password‘;
        $postData = http_build_query($post_data, ‘‘, ‘&‘); 
        $options = array(
            ‘http‘ =>array(
                ‘method‘=>"POST",
                ‘header‘=>"Accept-language: en\r\n".
                          "Cookie: foo=bar\r\n".
                          "Content-type: application/x-www-form-urlencoded\r\n".
                         "Authorization: Basic " . base64_encode("$username:$password").‘\r\n‘,
                ‘content‘ => $postData,
                ‘timeout‘ => 15 * 60,//超时时间(单位:s)
            )
        );
        //创建并返回一个流的资源
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
 
        return $result;
    }
 
 
备注:如果目标地址需要登录验证,就需要红色字部分的代码,如果不需要登录验证,红色字部分代码不用写
  1. <?php  
  2. /** 
  3.  * Socket版本 
  4.  * 使用方法: 
  5.  * $post_string = "app=socket&version=beta"; 
  6.  * request_by_socket(‘chajia8.com‘, ‘/restServer.php‘, $post_string); 
  7.  */  
  8. function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30) {  
  9.   $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);  
  10.   if (!$socket) die("$errstr($errno)");  
  11.   fwrite($socket, "POST $remote_path HTTP/1.0");  
  12.   fwrite($socket, "User-Agent: Socket Example");  
  13.   fwrite($socket, "HOST: $remote_server");  
  14.   fwrite($socket, "Content-type: application/x-www-form-urlencoded");  
  15.   fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . "");  
  16.   fwrite($socket, "Accept:*/*");  
  17.   fwrite($socket, "");  
  18.   fwrite($socket, "mypost=$post_string");  
  19.   fwrite($socket, "");  
  20.   $header = "";  
  21.   while ($str = trim(fgets($socket, 4096))) {  
  22.     $header .= $str;  
  23.   }  
  24.   
  25.   $data = "";  
  26.   while (!feof($socket)) {  
  27.     $data .= fgets($socket, 4096);  
  28.   }  
  29.   
  30.   return $data;  
  31. }  
  32. ?>  
  33.   
  34. <?php  
  35. /**  
  36.  * Curl版本  
  37.  * 使用方法:  
  38.  * $post_string = "app=request&version=beta";  
  39.  * request_by_curl(‘http://www.qianyunlai.com/restServer.php‘, $post_string);  
  40.  */  
  41. function request_by_curl($remote_server, $post_string) {  
  42.   $ch = curl_init();  
  43.   curl_setopt($ch, CURLOPT_URL, $remote_server);  
  44.   curl_setopt($ch, CURLOPT_POSTFIELDS, ‘mypost=‘ . $post_string);  
  45.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
  46.   curl_setopt($ch, CURLOPT_USERAGENT, "qianyunlai.com‘s CURL Example beta");  
  47.   $data = curl_exec($ch);  
  48.   curl_close($ch);  
  49.   
  50.   return $data;  
  51. }  
  52. ?> 
 

php 发送post、get请求的三种方式

标签:

原文地址:http://www.cnblogs.com/xuexikun/p/4973221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!