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.ini 中文版
Oct 28 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
php强制运行广告的方法
Dec 01 PHP
双冒号 ::在PHP中的使用情况
Nov 05 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 PHP
详解php实现页面静态化原理
Jun 21 PHP
php 数据结构之链表队列
Oct 17 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
python3 实现调用串口功能
2019/12/26 Python
Python-openCV开运算实例
2020/07/05 Python
python如何停止递归
2020/09/09 Python
python实现经典排序算法的示例代码
2021/02/07 Python
幼儿园家长工作总结2015
2015/04/25 职场文书
同事打架检讨书
2015/05/06 职场文书