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生成html分页列表的代码
Mar 18 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
解析MySql与Java的时间类型
Jun 22 PHP
浅谈php扩展imagick
Jun 02 PHP
CI框架中zip类应用示例
Jun 17 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
PHP PDOStatement::bindColumn讲解
Jan 30 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php实现生成验证码实例分享
2016/04/10 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
python实现实时监控文件的方法
2016/08/26 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
python实现串口自动触发工作的示例
2019/07/02 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
校长岗位职责
2013/11/26 职场文书
给学校的建议书
2014/03/12 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
邹越演讲观后感
2015/06/15 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript