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中foreach循环中使用引用要注意的地方
Jan 02 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
php下载文件的代码示例
Jun 29 PHP
input file获得文件根目录简单实现
Apr 26 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
php命名空间学习详解
Feb 27 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
Zend Framework分页类用法详解
Mar 22 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP实现简单的模板引擎功能示例
Sep 02 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 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类常量的使用详解
2013/06/08 PHP
重新认识php array_merge函数
2014/08/31 PHP
php导出CSV抽象类实例
2014/09/24 PHP
laravel安装和配置教程
2014/10/29 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
轻松实现js选项卡切换效果
2016/09/24 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
python合并同类型excel表格的方法
2018/04/01 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python里 super类的工作原理详解
2019/06/19 Python
详细分析Python垃圾回收机制
2020/07/01 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
C语言50道问题
2014/10/23 面试题
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
安全协议书
2014/04/23 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
大学生实习证明
2015/06/16 职场文书
关于的python五子棋的算法
2022/05/02 Python