PHP模拟http请求的方法详解


Posted in PHP onNovember 09, 2016

本文实例讲述了PHP模拟http请求的方法。分享给大家供大家参考,具体如下:

方法一:利用php的socket编程来直接给接口发送数据来模拟post的操作。

建立两个文件post.php,getpost.php

post.php内容如下:

<?php
 $flag = 0;
 $params = '';
 $errno = '';
 $errstr = '';
 //要post的数据
$argv = array(
  'var1'=>'abc',
  'var2'=>'how are you , my friend??');
//构造要post的字符串
foreach ($argv as $key=>$value) {
  if ($flag!=0) {
    $params .= "&";
    $flag = 1;
  }
  $params.= $key."="; $params.= urlencode($value);
  $flag = 1;
  }
  $length = strlen($params);
   //创建socket连接
  $fp = fsockopen("localhost",81,$errno,$errstr,10) or exit($errstr."--->".$errno);
  //构造post请求的头
  $header = "POST /flandy/getpost.php HTTP/1.1\r\n";
  $header .= "Host:127.0.0.1\r\n";
  $header .= "Referer:/flandy/post.php\r\n";
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $header .= "Content-Length: ".$length."\r\n";
  $header .= "Connection: Close\r\n\r\n";
  //添加post的字符串
  $header .= $params."\r\n";
  //发送post的数据
  fputs($fp,$header);
  $inheader = 1;
  while (!feof($fp)) {
    $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据
    if ($inheader && ($line == "\n" || $line == "\r\n")) {
       $inheader = 0;
    }
    if ($inheader == 0) {
     echo $line;
    }
  }
fclose($fp);
?>

getpost.php的内容如下:

<?php
echo "this is the data posted";
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
?>

结果输出:

this is the data posted
Array
(
  [var1] => abc
  [var2] => how are you , my friend??
)

以上代码在本机81端口下已经通过测试。

方法二:使用PHP的curl扩展或HttpClient.class.php类,这两个非常类似,下面简单的列出curl的实现代码。

两个文件post2.php和getpost2.php

post2.php的内容如下:

<?php
$psecode = 'NDE005';
$website = 'www.baidu.com';
$amt = 1;
$pwd = 123456;
$ch = curl_init();
$curl_url = "http://localhost:81/flandy/getpost2.php?web=" . $website .
"&pwd=" . $pwd . "&action=check&pseid=" . $psecode .
"&amt=" . $amt;
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接输出,返回到变量
$curl_result = curl_exec($ch);
$result = explode(',', $curl_result);
curl_close($ch);
print_r($result);
?>

getpost2.php的内容如下:

<?php
echo "returndata<br>";
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
?>

结果输出:

Array ( [0] => returndata
Array
(
  [web] => 'wwwbaiducom'
  [pwd] => 123456
  [action] => check
  [pseid] => 'NDE005'
  [amt] => 1
)
)

方法三:这个要借助第三方类库HttpClient

可以到这里下载:http://scripts.incutio.com/httpclient/

或者点击此处本站下载

<?php
require_once 'HttpClient.class.php';
$params = array('web' => 'www.baidu.com',
'pwd' => '123456',
'action' => 'check',
'pseid' => 'NDE005',
'amt' => 1);
$pageContents = HttpClient::quickPost('http://localhost:81/flandy/getpost3.php', $params);
$result = explode(',', $pageContents);
print_r($result);
?>

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

PHP 相关文章推荐
表格展示无限级分类(PHP版)
Aug 21 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
smarty模板数学运算示例
Dec 11 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
May 30 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 #PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 #PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 #PHP
thinkPHP批量删除的实现方法分析
Nov 09 #PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 #PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 #PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 #PHP
You might like
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php实现简易计算器
2020/08/28 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
python机器学习之神经网络实现
2018/10/13 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
擅自离岗检讨书
2014/09/12 职场文书
统计工作个人总结
2015/03/03 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
python标准库ElementTree处理xml
2022/05/20 Python