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 ): 无法连接到主机?的更多相关文章

  1. Foxmail:‘错误信息:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败’的解决办法

    每日必开-Foxmail 但是有连续半个多月未收到1封邮件 心想 大过年的 大家都不发邮件了 么 并未特别在意 直到该接收工资条的日子 我的Foxmail依然毫无动静 点了一下 收取 结果报如下错误: ...

  2. 解决file_get_contents无法请求https连接的方法

    PHP.ini默认配置下,用file_get_contents读取https的链接,就会报如下错误,本文给出解决方法 错误: Warning: fopen() [function.fopen]: Un ...

  3. win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误

    win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误 解决方法如下: Step 1:打开"本地安全策略"- Wi ...

  4. 解决ORA-00020错误

    解决ORA-00020错误 分类: Oracle2009-05-13 17:26 3398人阅读 评论(0) 收藏 举报 数据库sessionoraclesql服务器object 项目上使用的Orac ...

  5. centos 7:network: 正在打开接口 ens33: 错误:激活连接失败:No suitable device found for this connection.

    Mar :: localhost systemd: Starting LSB: Bring up/down networking... Mar :: localhost network: 正在打开环回 ...

  6. CloudFlare Support - Error 522: Connection timed out 错误522:连接超时

    522错误意味着我们无法在所有到达原点Web服务器. 这方面有几个主要原因: 原始服务器太超载回应. 源Web服务器具有挡住了我们的请求的防火墙,或者数据包被主机的网络内下降. 源Web服务器脱机,或 ...

  7. git解决本地建立git仓库 连接远程git仓库出现拒绝合并问题

    (git解决本地建立git仓库 连接远程git仓库出现拒绝合并问题) 第一步在本地创建仓库 在本地创建一个文件夹,cd 进入创建的文件夹之后 git init 创建仓库 ,ls -a 能够看到 .gi ...

  8. 【转】Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败

    错误原因如下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cannot ...

  9. Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败

    错误原因例如以下: Exception in thread "main" org.hibernate.exception.JDBCConnectionException: Cann ...

随机推荐

  1. Linux (九)服务器环境搭建

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.行为守则 1.拍摄快照 Linux系统操作非常复杂,搭建开发环境时全部使用命令完成安装过程.而在Li ...

  2. Java实现 LeetCode 785 判断二分图(分析题)

    785. 判断二分图 给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我 ...

  3. Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边

    无向连通图最少包含多少条边 题目 问题描述 一个包含有2019个结点的无向连通图,最少包含多少条边? 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填 ...

  4. Java实现 LeetCode 188 买卖股票的最佳时机 IV

    188. 买卖股票的最佳时机 IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多 ...

  5. Java实现字符串匹配

    1 问题描述 给定一个n个字符组成的串(称为文本),一个m(m <= n)的串(称为模式),从文本中寻找匹配模式的子串. 2 解决方案 2.1 蛮力法 package com.liuzhen.c ...

  6. Java实现选择问题

    选择问题是求一个n个数列表的第k个最小元素的问题. 那么如何寻找n个元素中第k个最小元素呢? package com.liuzhen.chapter4; public class SelectProb ...

  7. Java实现 洛谷 P1089 津津的储蓄计划

    import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scan ...

  8. ProxySQL简介原理及读写分离应用

    MySQL-ProxySQL中间件简介 同类型产品 MySQL Route:是现在MySQL官方Oracle公司发布出来的一个中间件. Atlas:是由奇虎360公发的基于MySQL协议的数据库中间件 ...

  9. windows server2012在已有.net4.5框架的基础上安装.net3.5的方法

    我们在一台服务器运行各种程序的时候难免会用到一些好用的但是很老的软件.老软件也就难免需要以前的那种环境来运行,但是老的环境与新的环境往往不兼容.下面我就来讲一讲系统在已有.net4.5的情况下怎么安装 ...

  10. 死啃了String源码之后

    Java源码之String 说在前面: 为什么看源码: 最好的学习的方式就是模仿,接下来才是创造.而源码就是我们最好的模仿对象,因为写源码的人都不是一般的人,所以用心学习源码,也就可能变成牛逼的人.其 ...