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 相关文章推荐
xml+php动态载入与分页
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
php强制下载类型的实现代码
Apr 21 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
解析php安全性问题中的:Null 字符问题
Jun 21 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
php并发加锁示例
Oct 17 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
Laravel 框架返回状态拦截代码
Oct 18 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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把session写入数据库示例
2014/02/26 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
jquery 上下滚动广告
2009/06/17 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
python中遍历文件的3个方法
2014/09/02 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Python autoescape标签用法解析
2020/01/17 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
英国领先的电视购物零售商:Ideal World
2019/03/18 全球购物
财务部绩效考核方案
2014/05/04 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
简爱读书笔记
2015/06/26 职场文书