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 相关文章推荐
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
PHP异常处理Exception类
Dec 11 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
PHP中递归的实现实例详解
Nov 14 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
laravel实现上传图片的两种方式小结
Oct 12 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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
php &amp;&amp; 逻辑与运算符使用说明
2010/03/04 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python中的模块和包概念介绍
2015/04/13 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
python、Matlab求定积分的实现
2019/11/20 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
python中if嵌套命令实例讲解
2021/02/25 Python
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
Java程序员常见面试题
2015/07/16 面试题
公司活动方案范文
2014/03/06 职场文书
项目投资建议书
2014/05/16 职场文书
学校师德师风整改措施
2014/10/27 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
大学生军训感言
2015/08/01 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏