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 批量删除数据的方法分析
Oct 30 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php继承的一个应用
Sep 06 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
PHP实现的CURL非阻塞调用类
Jul 26 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php 空格,换行,跳格使用说明
2009/12/18 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
smarty缓存用法分析
2014/12/16 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Django自定义manage命令实例代码
2018/02/11 Python
python pyheatmap包绘制热力图
2018/11/09 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
python中os包的用法
2020/06/01 Python
快餐公司创业计划书
2014/04/29 职场文书
党员民主评议个人总结
2014/10/20 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
职称评定个人总结
2015/03/05 职场文书
2015暑假假期总结
2015/07/13 职场文书
Mysql binlog日志文件过大的解决
2021/10/05 MySQL