2016-03-02 88 views
0

我想用php cURL调用一些http web服务。当我尝试在浏览器中调用该服务时,我可以提出请求并获得成功响应。但每当我试着通过卷曲称呼它,它失败,错误消息:couldn't connect to host我可以通过浏览器提交请求,但cURL说无法连接到主机,为什么?

我使用这里的代码如下:

$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; 
} 

如何解决/诊断呢?

+0

也许该网站拒绝来自useragent curl的请求?尝试使用'curl_setopt($ ch,CURLOPT_USERAGENT,“我的用户代理”)欺骗你的useragent;' – Jordy

回答

0

@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); 

现在它的工作。

1

,如果你有一个基于浏览器的HTTP代理服务器设置

+0

我能做些什么来解决cURL的问题? – mshsayem

+0

请参阅curl,-x,--proxy <[protocol://] [user:password @] proxyhost [:port]>的手册页,可以使用我推测 – Bijoy

1

你尝试设置SSL_VERIFYER为false这可能发生吗?

curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false);

相关问题