2011-04-21 66 views
1

我有一个函数make_curl_request发出curl请求。简单的卷曲请求不起作用

/** 
* General Function to make curl request */ 
function make_curl_request($url, $data) 
{ 
    ob_start(); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_exec($ch); 
    curl_close($ch); 
    $strCurlResponse = ob_get_contents(); 
    ob_end_clean(); 
    return $strCurlResponse; 
} 

我打电话它喜欢:

$strGatewayResponse = make_curl_request(REQUEST_URL, compact('strMobileNo', 'strKeywords', 'strApiKey')); 

我试过的东西,但不能让我的代码工作正常。目前它的返回字符串(“”)作为输出。我哪里错了?

我的目标是简单地将少量数据发布到位于其他域的下一页并获取其xml响应并解析并显示它。还有其他简单而好的解决方案吗?

+0

第一步:'echo curl_error();' – 2011-04-21 17:07:38

+0

我得到0 ....即。 echo curl_error($ ch)=> output = 0 – KoolKabin 2011-04-21 17:11:51

回答

5

问题是你已经将RETURNTRANSFER设置为TRUE,这意味着curl返回它的输出而不是直接输出它。但是,您并未在变量中捕获该输出,因此它在地板上下降。

你有两个选择

一)删除OB _ *()函数删除PHP缓存,然后做

$data = curl_exec($ch) 
if ($data === FALSE) { 
    die("Curl failed: " . curL_error($ch)); 
} 

之后$data包含您已对URL的内容牵强。

b)删除RETURNTRANSFER选项,并让curl将其正常的“输出到客户端”的东西,然后通过PHP输出缓冲捕获。

+0

gr8 pinpoint ... thnx它有帮助...我需要3分钟才能选择它作为正确 – KoolKabin 2011-04-21 17:16:54

3

试图通过添加一行:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

FALSE从验证对方的证书停止卷曲。可以使用CURLOPT_CAINFO选项指定要验证的替代证书,也可以使用CURLOPT_CAPATH选项指定证书目录。

+0

使用以下内容仅**执行本地主机测试:' if(substr($ _ SERVER ['HTTP_HOST'],0,4)!='www。'){curl_setopt($ curl_handle,CURLOPT_SSL_VERIFYPEER,false);}'这个假设你*需要* ** www。**前缀为你的域名,我*高度*建议在现场(或“生产”)环境中做。因为让SSL在本地主机上正常工作相当于赢得了互联网上的政治争论。 – John 2017-11-25 11:50:38