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小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
PHP XML error parsing SOAP payload on line 1
Jun 17 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
destoon官方标签大全
Jun 20 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 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实现分页的一个示例
2006/10/09 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
php函数与传递参数实例分析
2014/11/15 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Python统计单词出现的次数
2018/04/04 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
实例讲解Python3中abs()函数
2019/02/19 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
python实现udp传输图片功能
2020/03/20 Python
python利用faker库批量生成测试数据
2020/10/15 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
个人简历中的自我评价范例
2013/10/29 职场文书
写给女生的道歉信
2014/01/14 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
小升初自荐信范文
2015/03/05 职场文书
听证通知书
2015/04/24 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python