php - 如何解决CURL错误( 7 ): 无法连接到主机?
php - 如何解决CURL错误( 7 ): 无法连接到主机?
1. 问题描述
调用第三方接口,本地调用一切ok,线上调用失败!
本地通过curLRequest()方法调用第三方接口时,curl_errno()方法返回结果为0,显示调用成功,线上curl_errno()方法返回结果为7,调用失败。
环境:
本地wamp,线上lnmp
为了排除环境问题,在服务器上cmd执行curl函数对第三方接口进行了post请求,发现调用成功!调用脚本入下:
curl -i -X POST -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf-8' -H 'Authorization:**********************=' -d '{"voipAccount":"*********"}' 第三方接口的URL
调用第三方接口关键代码:
/**
* @param $requestUrl | String 请求的地址
* @param bool $https
* @param $headerInfo | array 头文件信息
* @param string $rquestMethod | String 请求类型
* @param $requestData | json 发送请求的数据
* @return mixed
*/
public function curLRequest($requestUrl,$requestData,$https=true,$rquestMethod='post')
{
$headerInfo=[
'Accept:application/json',
'Content-Type:application/json;charset=utf-8',
'Authorization:'.self::$auth
];
$ch = curl_init();//初始化
curl_setopt($ch, CURLOPT_URL, $requestUrl);//设置访问的URL
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerInfo); // 设置头信息
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//只获取页面内容,但不输出
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//不做服务器认证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//不做客户端认证
}
if($rquestMethod == 'post'){
curl_setopt($ch, CURLOPT_POST, true);//设置请求是POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestData);//设置POST请求的数据
}
$str = curl_exec($ch);//执行访问,返回结果
if(curl_errno($ch)){
Log::write('结果=========================================================:'.curl_errno($ch));
return ['statuscode' => -1, 'data' => 'curl请求错误,错误码为'.curl_errno($ch)];
}
Log::write('结果=========================================================:'.curl_errno($ch));
Log::write('返回结果:'.$str);
curl_close($ch);//关闭curl,释放资源
return json_decode($str,true);
}
经过各种排查,代码无误,我的问题为线上环境的相关配置问题。
2. 解决办法
①打开selinux目录下的config文件
nano /etc/selinux/config
②找到config文件中的SELINUX=enforcing这行
③更改SELINUX=disabled
④保存,退出,重启服务器
3.小结
CURL错误 7未能连接到权限被拒绝"错误是由于CURL请求被某些防火墙或者类似的东西阻塞时造成的。
当curl请求与标准端口不匹配时,你将面临这个问题。
例如如果你在端口 1234上做了 curl,那么你将面临这个问题,因为端口 80的URL会给你带来很容易的结果。
最常见的这个错误已经在CentOS和其他带有'selinux'的操作系统上看到了。
你需要禁用或者将'selinux'改为允许
博文参考
https://ask.helplib.com/php/post_802819
http://www.akashif.co.uk/php/curl-error-7-failed-to-connect-to-permission-denied
php - 如何解决CURL错误( 7 ): 无法连接到主机?的更多相关文章
- Foxmail:‘错误信息:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败’的解决办法
每日必开-Foxmail 但是有连续半个多月未收到1封邮件 心想 大过年的 大家都不发邮件了 么 并未特别在意 直到该接收工资条的日子 我的Foxmail依然毫无动静 点了一下 收取 结果报如下错误: ...
- 解决file_get_contents无法请求https连接的方法
PHP.ini默认配置下,用file_get_contents读取https的链接,就会报如下错误,本文给出解决方法 错误: Warning: fopen() [function.fopen]: Un ...
- win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误
win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误 解决方法如下: Step 1:打开"本地安全策略"- Wi ...
- 解决ORA-00020错误
解决ORA-00020错误 分类: Oracle2009-05-13 17:26 3398人阅读 评论(0) 收藏 举报 数据库sessionoraclesql服务器object 项目上使用的Orac ...
- centos 7:network: 正在打开接口 ens33: 错误:激活连接失败:No suitable device found for this connection.
Mar :: localhost systemd: Starting LSB: Bring up/down networking... Mar :: localhost network: 正在打开环回 ...
- CloudFlare Support - Error 522: Connection timed out 错误522:连接超时
522错误意味着我们无法在所有到达原点Web服务器. 这方面有几个主要原因: 原始服务器太超载回应. 源Web服务器具有挡住了我们的请求的防火墙,或者数据包被主机的网络内下降. 源Web服务器脱机,或 ...
- git解决本地建立git仓库 连接远程git仓库出现拒绝合并问题
(git解决本地建立git仓库 连接远程git仓库出现拒绝合并问题) 第一步在本地创建仓库 在本地创建一个文件夹,cd 进入创建的文件夹之后 git init 创建仓库 ,ls -a 能够看到 .gi ...
- 【转】Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败
错误原因如下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot ...
- Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败
错误原因例如以下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cann ...
随机推荐
- python九九乘法表程序代码
按照c语言的思路来考虑python的,方法很简单,直接运用双重循环即可,本代码为了代码量少采用的是while嵌套双循环. 取两个随机变量 (1)i和j都从1开始(因为表中最小数值为1) (2)i控制第 ...
- git的相关基础操作
一.git安装 从https://git-scm.com/下载相应版本安装即可,一路默认安装到底即可,安装目录可以自行选择 二.git配置 安装完git后在任意文件夹内单击鼠标右键,会出现Git GU ...
- oeong.xyz
兴趣使然而搭的小破站:oeong.xyz
- Go 语言入门教程:安装
关注公众号:雨哥写 python. 学习 Go 语言,比较下和 python 的用法,争取对 python 有更深的理解. 为什么学 Go 我主要使用 python 语言,其他语言用得不多,希望学一门 ...
- C# Winform 学习(四)
目标 1.文本类 2.选择类 3.导航类 一.文本类控件 1.文本标签Label 1)命名:lbl开始 2)常用属性: Text.Visible 2.文本框TextBox 1)命名:txt开始 2)常 ...
- Java实现十六进制转十进制
基础练习 十六进制转十进制 时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进 ...
- Java实现 LeetCode 437 路径总和 III(三)
437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...
- Java实现 LeetCode 310 最小高度树
310. 最小高度树 对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树.给出这样的一个图,写出一个函数找到所有的最小高度树 ...
- Java实现 蓝桥杯VIP 算法提高 打水问题
算法提高 打水问题 时间限制:1.0s 内存限制:512.0MB 问题描述 N个人要打水,有M个水龙头,第i个人打水所需时间为Ti,请安排一个合理的方案使得所有人的等待时间之和尽量小. 输入格式 第一 ...
- java实现第七届蓝桥杯分小组
分小组 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF GHI ...