php发送http请求的常用方法分析


Posted in PHP onNovember 08, 2016

本文实例讲述了php发送http请求的常用方法。分享给大家供大家参考,具体如下:

http请求有get,post

php发送http请求有三种方式[我所知道的有三种,有其他的告诉我]。

1. file_get_contents();详情见:https://3water.com/article/41833.htm
2. curl发送请求。
3. fsocket发送。

下面说使用curl发送

首先环境需要配置好curl组件。

在windows中让php支持curl比较简单:

在php.ini中将extension=php_curl.dll前面的分号去掉,
有人说需要将php根目录的libeay32.dll和ssleay32.dll需要拷贝到系统目录下去。我实验不拷贝也可以。
在linux中,如果使用源码安装,需要在make 之前,./configure --with-curl=path,
其中,path是你的 libcurl库的位置,比如你安装libcurl库之后,
path可能就是/usr/local/,libcurl可以是静态库,也可以是动态库。
注意libcurl库configure的时候,可以将一些不需要的功能去掉,
比如ssl , ldap等。在php configure的时候,会去检查libcurl中某些功能是否被开启,进而去相应地调整生成的php

两个使用curl发请求的例子。

// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'https://3water.com');
// 设置header 响应头是否输出
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
// 1如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
print_r($data);

再一个post方式的例子:

//post方式
$phoneNumber ="13912345678";
$message = "testMessage";
$curlPost = "phone=".urlencode($phoneNumber)."&message=".$message;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://mytest/lab/t.php');
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,0);
//设置是通过post还是get方法
curl_setopt($ch,CURLOPT_POST,1);
//传递的变量
curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
$data = curl_exec($ch);
curl_close($ch);

在这个http://mytest/lab/t.php文件中:

if(!empty($_POST)){
 print_r($_POST);
}

就先写这么多。

Fsocket:

$gurl = "http://mytest/lab/t.php?uu=gggggg";
//print_r(parse_url($gurl));
echo "以下是GET方式的响应内容:<br>";
sock_get($gurl);
function sock_get($url)
{
 $info = parse_url($url);
 $fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
 $head = "GET ".$info['path']."?".$info["query"]." HTTP/1.0\r\n";
 $head .= "Host: ".$info['host']."\r\n";
 $head .= "\r\n";
 $write = fputs($fp, $head);
 while (!feof($fp)){
  $line = fgets($fp);
  echo $line."<br>";
 }
}
//fsocket模拟post提交
$purl = "http://mytest/lab/t.php";
echo "以下是POST方式的响应内容:<br>";
sock_post($purl,"uu=rrrrrrrrrrrr&&kk=mmmmmm");
function sock_post($url, $query)
{
 $info = parse_url($url);
 $fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
 $head = "POST ".$info['path']." HTTP/1.0\r\n";
 $head .= "Host: ".$info['host']."\r\n";
 $head .= "Referer: http://".$info['host'].$info['path']."\r\n";
 $head .= "Content-type: application/x-www-form-urlencoded\r\n";
 $head .= "Content-Length: ".strlen(trim($query))."\r\n";
 $head .= "\r\n";
 $head .= trim($query);
 $write = fputs($fp, $head);
 print_r(fgets($fp));
 while (!feof($fp))
 {
  $line = fgets($fp);
  echo $line."<br>";
 }
}

curl添加gzip的参数可参考:

php curl中gzip的压缩性能测试实例分析: https://3water.com/article/96778.htm

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
PHP数组及条件,循环语句学习
Nov 11 PHP
PHP限制HTML内容中图片必须是本站的方法
Jun 16 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
PHP实现的简单组词算法示例
Apr 10 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 #PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 #PHP
php实现的http请求封装示例
Nov 08 #PHP
PHP实现原生态图片上传封装类方法
Nov 08 #PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 #PHP
Yii2框架BootStrap样式的深入理解
Nov 07 #PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 #PHP
You might like
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
小学学校门卫岗位职责
2014/08/03 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
社区国庆节活动总结
2015/03/23 职场文书
音乐会主持人开场白
2015/05/28 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
浅谈Web Storage API的使用
2021/06/23 Javascript
我收到了德劲DE1107
2022/04/05 无线电
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技