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页面间传递参数实例代码
Jun 05 PHP
php intval的测试代码发现问题
Jul 27 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
PHP垃圾回收机制简单说明
Jul 22 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
ini_set的用法介绍
Jan 07 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
PHP实现的简单日历类
Nov 29 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
laravel请求参数校验方法
Oct 10 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
Python函数返回值实例分析
2015/06/08 Python
python的多重继承的理解
2017/08/06 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
计算机专业大学生的自我评价
2013/11/14 职场文书
青年文明号申报材料
2014/12/23 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android