2011-04-21 65 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