php使用socket post数据到其它web服务器的方法


Posted in PHP onJune 02, 2015

本文实例讲述了php使用socket post数据到其它web服务器的方法。分享给大家供大家参考。具体实现方法如下:

function post_request($url, $data, $referer='') {
  // Convert the data array into URL Parameters like a=b&foo=bar etc.
  $data = http_build_query($data);
  // parse the given URL
  $url = parse_url($url);
  if ($url['scheme'] != 'http') { 
    die('Error: Only HTTP request are supported !');
  }
  // extract host and path:
  $host = $url['host'];
  $path = $url['path'];
  // open a socket connection on port 80 - timeout: 30 sec
  $fp = fsockopen($host, 80, $errno, $errstr, 30);
  if ($fp){
    // send the request headers:
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    if ($referer != '')
      fputs($fp, "Referer: $referer\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Content-length: ". strlen($data) ."\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $data);
    $result = ''; 
    while(!feof($fp)) {
      // receive the results of the request
      $result .= fgets($fp, 128);
    }
  }
  else { 
    return array(
      'status' => 'err', 
      'error' => "$errstr ($errno)"
    );
  }
  // close the socket connection:
  fclose($fp);
  // split the result header from the content
  $result = explode("\r\n\r\n", $result, 2);
  $header = isset($result[0]) ? $result[0] : '';
  $content = isset($result[1]) ? $result[1] : '';
  // return as structured array:
  return array(
    'status' => 'ok',
    'header' => $header,
    'content' => $content
  );
}
//使用方法
// Submit those variables to the server
$post_data = array(
  'test' => 'foobar',
  'okay' => 'yes',
  'number' => 2
);
// Send a request to example.com 
$result = post_request('http://www.example.com/', $post_data);
if ($result['status'] == 'ok'){
  // Print headers 
  echo $result['header']; 
  echo '<hr />';
  // print the result of the whole request:
  echo $result['content'];
}
else {
  echo 'A error occured: ' . $result['error']; 
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php strtotime 函数UNIX时间戳
Jan 14 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
Yii2实现ajax上传图片插件用法
Apr 28 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
php自动给网址加上链接的方法
Jun 02 #PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 #PHP
php正则preg_replace_callback函数用法实例
Jun 01 #PHP
php实现读取和写入tab分割的文件
Jun 01 #PHP
php从文件夹随机读取文件的方法
Jun 01 #PHP
php计算整个目录大小的方法
Jun 01 #PHP
php获取系统变量方法小结
May 29 #PHP
You might like
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
jQuery实现轮播图效果demo
2020/01/11 jQuery
vue实现页面切换滑动效果
2020/06/29 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
python抓取网页中的图片示例
2014/02/28 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
Python 的AES加密与解密实现
2019/07/09 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
python实现简单学生信息管理系统
2020/04/09 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
护理专业学生的求职信范文
2013/12/11 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
房租涨价通知
2015/04/23 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
Redis过期数据是否会被立马删除
2022/07/23 Redis