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扩展ZF――Validate扩展
Jan 10 PHP
PHP开发的一些注意点总结
Oct 12 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
php依赖注入知识点详解
Sep 23 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时间不正确的解决方法
2008/04/09 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
python3图片转换二进制存入mysql
2013/12/06 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
django项目搭建与Session使用详解
2018/10/10 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python实现求特征选择的信息增益
2018/12/18 Python
Django中提示消息messages的设置方式
2019/11/15 Python
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
新学期班主任寄语
2014/01/18 职场文书
个人作风剖析材料
2014/02/02 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
公司承诺书范文
2014/05/19 职场文书
商铺消防安全责任书
2014/07/29 职场文书
教师节校长致辞
2015/07/31 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers