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学习资料汇总与网址
Mar 16 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
php生成随机颜色方法汇总
Dec 03 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
Python itertools模块详解
2015/05/09 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python实现基于POS算法的区块链
2018/08/07 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Python-openCV开运算实例
2020/07/05 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
工程师岗位职责规定
2014/02/26 职场文书
2014最新离职证明范本
2014/09/12 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电