简单的卷曲请求不起作用

时间:2011-04-21 17:05:35

标签: php curl cross-domain

我有一个函数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响应并解析并显示它。还有其他简单而好的解决方案吗?

3 个答案:

答案 0 :(得分:5)

问题是你已经将RETURNTRANSFER设置为TRUE,这意味着curl返回其输出而不是直接输出它。但是,你没有在一个变量中捕获那个输出,所以它正在落在地板上。

你有两个选择

a)删除ob _ *()函数以删除PHP缓冲,然后执行

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

之后$data包含您提取的网址的内容。

b)删除RETURNTRANSFER选项,让curl正常“直接输出到客户端”,然后由PHP输出缓冲捕获。

答案 1 :(得分:3)

尝试添加一行:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

FALSE阻止cURL验证对等方的证书。可以使用CURLOPT_CAINFO选项指定要验证的备用证书,也可以使用CURLOPT_CAPATH选项指定证书目录。

答案 2 :(得分:0)

发送没有标题的curl POST是不行的。 请找到以下链接。它可能有所帮助 OAuth, PHP, Rest API and curl gives 400 Bad Request