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怎样调用MSSQL的存储过程
Oct 09 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 PHP
php-fpm配置详解
Feb 12 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
PHP+AJAX实现投票功能的方法
Sep 28 PHP
全面了解PHP中的全局变量
Jun 17 PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
一个实用的php验证码类
Jul 06 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动态函数调用方法
2015/05/21 PHP
php把数组值转换成键的方法
2015/07/13 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
javascript实现动态标签云
2015/10/16 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
2015年仓管员工作总结
2015/04/21 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript