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面向对象分析设计的61条军规小结
Jul 17 PHP
PHP排序算法的复习和总结
Feb 15 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
php过滤XSS攻击的函数
Nov 12 PHP
Destoon模板制作简明教程
Jun 20 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
PHP的new static和new self的区别与使用
Nov 27 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判断是否为空的几个函数对比
2015/04/21 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
深入理解vue Render函数
2017/07/19 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue的for循环使用方法
2019/02/12 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
详解Python中的join()函数的用法
2015/04/07 Python
Python注释详解
2016/06/01 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
个人求职简历的自我评价范文
2013/10/09 职场文书
酒店个人培训自我鉴定
2013/12/11 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
警察群众路线整改措施
2014/09/26 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
办公室主任个人总结
2015/02/28 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python