php发送post请求的三种方法


Posted in PHP onFebruary 11, 2014

方法一:

/**
 * 发送post请求
 * @param string $url 请求地址
 * @param array $post_data post键值对数据
 * @return string
 */
function send_post($url, $post_data) {

  $postdata = http_build_query($post_data);
  $options = array(
    'http' => array(
      'method' => 'POST',
      'header' => 'Content-type:application/x-www-form-urlencoded',
      'content' => $postdata,
      'timeout' => 15 * 60 // 超时时间(单位:s)
    )
  );
  $context = stream_context_create($options);
  $result = file_get_contents($url, false, $context);

  return $result;
}

//使用方法
$post_data = array(
  'username' => 'stclair2201',
  'password' => 'handan'
);
send_post('https://3water.com', $post_data);

方法二:Socket版本

<?php
/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&version=beta";
 * request_by_socket('chajia8.com', '/restServer.php', $post_string);
 */
function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30) {
  $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);
  if (!$socket) die("$errstr($errno)");
  fwrite($socket, "POST $remote_path HTTP/1.0");
  fwrite($socket, "User-Agent: Socket Example");
  fwrite($socket, "HOST: $remote_server");
  fwrite($socket, "Content-type: application/x-www-form-urlencoded");
  fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . "");
  fwrite($socket, "Accept:*/*");
  fwrite($socket, "");
  fwrite($socket, "mypost=$post_string");
  fwrite($socket, "");
  $header = "";
  while ($str = trim(fgets($socket, 4096))) {
    $header .= $str;
  }

  $data = "";
  while (!feof($socket)) {
    $data .= fgets($socket, 4096);
  }

  return $data;
}
?>

方法三:Curl版本

<?php
/**
 * Curl版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_curl('https://3water.com/restServer.php', $post_string);
 */
function request_by_curl($remote_server, $post_string) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $remote_server);
  curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_USERAGENT, "3water.com's CURL Example beta");
  $data = curl_exec($ch);
  curl_close($ch);

  return $data;
}
?>

下面是其他网友的方法:

class Request{
  public static function post($url, $post_data = '', $timeout = 5){//curl
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    if($post_data != ''){
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $file_contents = curl_exec($ch);
    curl_close($ch);
    return $file_contents;
  }
  public static function post2($url, $data){//file_get_content
    
    $postdata = http_build_query(
      $data
    );
    
    $opts = array('http' =>
           array(
             'method' => 'POST',
             'header' => 'Content-type: application/x-www-form-urlencoded',
             'content' => $postdata
           )
    );
    
    $context = stream_context_create($opts);
    $result = file_get_contents($url, false, $context);
    return $result;
  }
  public static function post3($host,$path,$query,$others=''){//fsocket
    $post="POST $path HTTP/1.1\r\nHost: $host\r\n";
    $post.="Content-type: application/x-www-form-";
    $post.="urlencoded\r\n${others}";
    $post.="User-Agent: Mozilla 4.0\r\nContent-length: ";
    $post.=strlen($query)."\r\nConnection: close\r\n\r\n$query";
    $h=fsockopen($host,80);
    fwrite($h,$post);
    for($a=0,$r='';!$a;){
        $b=fread($h,8192);
        $r.=$b;
        $a=(($b=='')?1:0);
      }
    fclose($h);
    return $r;
  }
}

大家可以根据需要选择适合自己的即可。

PHP 相关文章推荐
微博短链接算法php版本实现代码
Sep 15 PHP
PHP编码转换
Nov 05 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
codeigniter教程之多文件上传使用示例
Feb 11 #PHP
php创建sprite
Feb 11 #PHP
PHP循环结构实例讲解
Feb 10 #PHP
更改localhost为其他名字的方法
Feb 10 #PHP
php 获取SWF动画截图示例代码
Feb 10 #PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 #PHP
php判断正常访问和外部访问的示例
Feb 10 #PHP
You might like
php简单的会话类代码
2011/08/08 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python实现人脸签到系统
2020/04/13 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
创业计划书中包含的9个方面
2013/12/26 职场文书
粗加工管理制度
2014/02/04 职场文书
英语通知范文
2015/04/22 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
Python序列化模块JSON与Pickle
2022/06/05 Python