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中Date()时间日期函数的使用方法小结
Apr 20 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 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 visitFile()遍历指定文件夹函数
2010/08/21 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
python人人网登录应用实例
2014/09/26 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python正则表达式常用函数总结
2017/06/24 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Python过滤序列元素的方法
2020/07/31 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
物流司机岗位职责
2013/12/28 职场文书
比赛口号大全
2014/06/10 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js