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 相关文章推荐
Phpbean路由转发的php代码
Jan 10 PHP
php xml文件操作实现代码(二)
Mar 20 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
Yii框架上传图片用法总结
Mar 28 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 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 数组遍历foreach语法结构及实例
2016/06/13 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
python里运用私有属性和方法总结
2019/07/08 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
python 字典的打印实现
2019/09/26 Python
python异常处理try except过程解析
2020/02/03 Python
Python日志syslog使用原理详解
2020/02/18 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
python简单实现插入排序实例代码
2020/12/16 Python
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
工作年限证明模板
2014/11/01 职场文书
法律进社区活动总结
2015/05/07 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
angular4实现带搜索的下拉框
2022/03/25 Javascript
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android
win7配置本地ftp服务器的图文教程
2022/08/05 Servers