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 相关文章推荐
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
PHP实现多文件上传的方法
Jul 08 PHP
PHP7.0安装笔记整理
Aug 28 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
浅谈php常用的7大框架的优缺点
Jul 20 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
用PHP生成html分页列表的代码
2007/03/18 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
Python文本相似性计算之编辑距离详解
2016/11/28 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
python模拟事件触发机制详解
2018/01/19 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
党员自我评价分享
2013/12/13 职场文书
大学自主招生自荐信
2013/12/16 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
项目经理岗位职责
2015/01/31 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
2015双创工作总结
2015/07/24 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电