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 08 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP获取一个字符串中间一部分字符的方法
Aug 19 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
微信支付开发交易通知实例
Jul 12 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
PHP使用QR Code生成二维码实例
Jul 07 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
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php实现的二分查找算法示例
2017/06/20 PHP
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
python循环监控远程端口的方法
2015/03/14 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
tensorflow获取变量维度信息
2018/03/10 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
python学生管理系统
2019/01/30 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
日本小田急百货官网:Odakyu
2018/07/19 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
应聘自荐信
2013/12/14 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
三峡人家导游词
2015/01/31 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL