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 相关文章推荐
E路文章系统PHP
Dec 11 PHP
php过滤危险html代码
Aug 18 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
PHP加密解密字符串汇总
Apr 26 PHP
php析构函数的简单使用说明
Aug 24 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
Yii redis集合的基本使用教程
Jun 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
javascript强大的日期函数代码分享
2013/09/04 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
什么是Python包的循环导入
2020/09/08 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
工程索赔意向书
2014/08/30 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
导游词之上海豫园
2019/10/24 职场文书