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 adodb介绍
Mar 19 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
php知道与问问的采集插件代码
Oct 12 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
解析PHP的session过期设置
Jun 29 PHP
PHP队列用法实例
Nov 05 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php实现每日签到功能
Nov 29 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
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
用JavaScript调用WebService的示例
2008/04/07 Javascript
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
2019/03/20 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
python语言元素知识点详解
2019/05/15 Python
Django框架 信号调度原理解析
2019/09/04 Python
python的sys.path模块路径添加方式
2020/03/09 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
青年安全生产示范岗事迹材料
2014/05/04 职场文书
法院个人总结
2015/03/03 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
四则混合运算教学反思
2016/02/23 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
docker 制作mysql镜像并自动安装
2022/05/20 Servers