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中动态HTML的输出技术
Oct 09 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
php实现的双向队列类实例
Sep 24 PHP
如何实现php图片等比例缩放
Jul 28 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
php使用PDO执行SQL语句的方法分析
Feb 16 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
php 中英文语言转换类代码
2011/08/11 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
用客户端js实现带省略号的分页
2013/04/27 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
javascript的this关键字详解
2019/05/20 Javascript
JS实现滑动插件
2020/01/15 Javascript
Selenium控制浏览器常见操作示例
2018/08/13 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
python 读取串口数据的示例
2020/11/09 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
夜大毕业生自我鉴定
2013/10/31 职场文书
自主实习接收函
2014/01/13 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
幼师求职自荐信
2014/05/31 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书