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 GD 图像处理组件的常用函数总结
Apr 28 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
php绘制一个矩形的方法
Jan 24 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
解决php扩展安装不生效问题
Oct 25 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
asp批量修改记录的代码
2008/06/25 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
Seajs的学习笔记
2014/03/04 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python读写unicode文件的方法
2015/07/10 Python
python方向键控制上下左右代码
2018/01/20 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python中栈的原理及实现方法示例
2019/11/27 Python
Django异步任务线程池实现原理
2019/12/17 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
.NET初级开发工程师面试题
2014/04/18 面试题
入党思想汇报怎么写
2014/04/03 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
MySQL空间数据存储及函数
2021/09/25 MySQL