我可以通过浏览器提交请求,但 cURL 说无法连接到主机,为什么


I can submit request by browser, but cURL says couldn't connect to host, why?

我正在尝试使用php cURL调用一些http web服务。当我尝试在浏览器中调用该服务时,我可以发出请求并获得成功的响应。但是每当我尝试通过 cURL 调用它时,它都会失败并显示错误消息:couldn't connect to host

我在这里使用的代码如下:

$url = 'http://myserviceurl.com';
$fields = array(
                        'field1' => urlencode('field1value'),
                        'field2' => urlencode('field2value'),
                        'field3' => urlencode('field3value')                        
                );
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
$result = curl_exec($ch);
if($result === false)
{    
    echo sprintf('<span>%s</span>CURL error:',curl_error($ch));
    return;
}

如何修复/诊断此问题?

如果您有基于浏览器的 http 代理集,则可能会发生这种情况

您是否尝试过将SSL_VERIFYER设置为 false?

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,假);

@Bijoy(在另一个答案中)是正确的。浏览器中设置了一个代理。我更改了代码以添加代理,如下所示CURLOPT_PROXY

$proxy = '<my-proxy-ip>:<proxy-port>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
$result = curl_exec($ch);

现在它起作用了。