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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
mysql limit查询优化分析
Nov 12 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
ThinkPHP路由详解
Jul 27 PHP
php fread函数使用方法总结
May 28 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
PHP Primary script unknown 解决方法总结
Aug 22 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
php中设置index.php文件为只读的方法
2013/02/06 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
Python中的高级数据结构详解
2015/03/27 Python
python实现批量改文件名称的方法
2015/05/25 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python调用支付宝支付接口流程
2019/08/15 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
Python pip 常用命令汇总
2020/10/19 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
父亲八十大寿答谢词
2014/01/23 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
2014年保管员工作总结
2014/11/18 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
讲座通知范文
2015/04/23 职场文书
治庸问责工作总结
2015/08/11 职场文书