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管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php二维数组转成字符串示例
Feb 17 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
php简单的上传类分享
May 15 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
Jul 03 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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
2006/12/14 PHP
dedecms中常见问题修改方法总结
2007/03/21 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
Linux下多个Python版本安装教程
2018/08/15 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python利用线程实现多任务
2020/09/18 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
一个精品风格的世界:Atterley
2019/05/01 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
个人查摆剖析材料
2014/02/04 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
2014年党小组工作总结
2014/12/20 职场文书
给领导敬酒词
2015/08/12 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python