CURL不能与本地服务器上的域名一起运行

时间:2019-05-31 13:21:50

标签: php curl

我正在尝试使用curl在我的centOs7共享服务器中运行本地php文件,但是我无法对本地文件使用curl方法。 这是我的示例文件:

--bg/
------back.php
------curl.php

这是curl.php代码:

<?php
function run_curl($data){
    //url-ify the data for the POST
    $fields_string = '';
    //foreach($data as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    $fields_string = http_build_query($data);
    //open connection
    $ch = curl_init();
    //set the url, number of POST vars, POST data
    //curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: ' . $content_type]);
    curl_setopt($ch, CURLOPT_POST,true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json'
        )
    );
    curl_setopt($ch,CURLOPT_URL,'https://taskdan.com/bg/back.php');
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,50); # timeout after 10 seconds, you can increase it
    //curl_setopt($ch,CURLOPT_HEADER,false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  # Set curl to return the data instead of printing it to the browser.
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); # Some server may refuse your request if you dont pass user agent
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    //execute post
    $result = curl_exec($ch);
    //print_r($result);
    //print_r((curl_getinfo($ch)));
    //error_log($result);
    //close connection
    curl_close($ch);
    return ($result); 
}
echo " Output : </br>";
echo run_curl( [
    "ab" => "test"
]);
?>

以及下面的back.php代码:

<?php
header("Content-Type:application/json");
echo json_encode([
    "a" => "test"
])
?>

当我运行此代码时,它似乎将我的域名转换为服务器的公共IP地址。 Curl在服务器脚本之外的其他环境下都可以正常工作。

当我使用SSH运行curl时,我得到了:

[root@??? ~]# curl https://taskdan.com -k
<html>Apache is functioning normally</html>
[root@??? ~]# curl http://171.22.27.118 -k
<html>Apache is functioning normally</html>

我想在后台运行一些脚本,有没有办法通过CURL运行带有POST参数的本地php文件?

2 个答案:

答案 0 :(得分:1)

您确定您的Apache虚拟主机已配置为在所有接口上进行侦听吗? 当您对/ etc / hosts中配置为127.0.0.1的域进行DNS查找时,请求将被指向回送接口。 打开您的虚拟主机配置并搜索:

<VirtualHost ...>

如果配置为

<VirtualHost 171.22.27.118:80>

将其更改为

<VirtualHost *:80>

..然后重试

如果由于任何原因而无法编辑VirtualHost定义,则可以指示cURL在特定地址/端口上发出请求并设置正确的Host标头:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Host: taskdan.com'
    )
);
curl_setopt($ch,CURLOPT_URL,'https://171.22.27.118/bg/back.php');

这可以帮助缓解问题,但不能保证能正常工作,因为问题是Web服务器配置本身不是源代码。

答案 1 :(得分:1)

您的/etc/hosts文件应如下所示:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

将其更改为以下形式:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 taskdan.com
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 taskdan.com

或者,只需更改您的代码即可。

curl_setopt($ch,CURLOPT_URL,'http://127.0.0.1/bg/back.php');

并相应地配置Apache。