php中用socket模拟http中post或者get提交数据的示例代码


Posted in PHP onAugust 08, 2013

废话不多说。直接上代码:
sock_post.php:

<?php
function sock_post($url, $data='') {
  $url = parse_url($url);
  $url['scheme'] || $url['scheme'] = 'http';
  $url['host'] || $url['host'] = $_SERVER['HTTP_HOST'];
  $url['path'][0] != '/' && $url['path'] = '/'.$url['path'];
  $query = $data;
  if(is_array($data)) $query = http_build_query($data);
  $fp = @fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
  if (!$fp) return "Failed to open socket to $url[host]";
  fputs($fp, sprintf("POST %s%s%s HTTP/1.0/n", $url['path'], $url['query'] ? "?" : "", $url['query']));
  fputs($fp, "Host: $url[host]/n");
  fputs($fp, "Content-type: application/x-www-form-urlencoded/n");
  fputs($fp, "Content-length: " . strlen($query) . "/n");
  fputs($fp, "Connection: close/n/n");
  fputs($fp, "$query/n");
  $line = fgets($fp,1024);
  if (@!eregi("^HTTP/1/.. 200", $line))  return;
  $results = ""; 
  $inheader = 1;
  while(!feof($fp)) {
    $line = fgets($fp,1024);
    if ($inheader && ($line == "/n" || $line == "/r/n")) {
      $inheader = 0;
    }elseif (!$inheader) {
      $results .= $line;
    }
  }
  fclose($fp);
  return $results;
}
 $re = sock_post('http://localhost/direct_post/get_post.php?id=1',array('wel'=>'hello'));
 echo $re;
?>

get_post.php:
<?php
echo "post:";
print_r($_POST);
echo 'get:';
print_r($_GET);
?>
PHP 相关文章推荐
PHP网站提速三大“软”招
Oct 09 PHP
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
浅析php原型模式
Nov 25 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
作为PHP程序员你要知道的另外一种日志
Jul 30 PHP
PHP实现简易图形计算器
Aug 28 PHP
PHP7变量处理机制修改
Mar 09 PHP
浅析php变量作用域的一些问题
Aug 08 #PHP
解析php开发中的中文编码问题
Aug 08 #PHP
php中jpgraph类库的使用介绍
Aug 08 #PHP
浅析php与数据库代码开发规范
Aug 08 #PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 #PHP
怎样使用php与jquery设置和读取cookies
Aug 08 #PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 #PHP
You might like
关于手调机和数调机的选择
2021/03/02 无线电
融入意大利的咖啡文化
2021/03/03 咖啡文化
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
详解Vue方法与事件
2017/03/09 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
tensorflow自定义激活函数实例
2020/02/04 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
计算机专业个人求职自荐信
2013/09/21 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
三严三实心得体会范文
2014/10/13 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
python Tkinter模块使用方法详解
2022/04/07 Python
nginx容器方式反向代理实战
2022/04/18 Servers