2016-05-06 213 views
1

我正在接收大量事件數據的界面,爲另一個系統做好準備並通過基於Web的API將其推送到系統中。使用cURL時參數會「丟失」

接收和處理數據的工作正常,但將它推入另一個系統失敗,當使用cURL。似乎來自查詢字符串的最後一個參數會丟失。

我如何知道?界面響應並告訴我缺少一個必需的參數。它似乎總是最後一個。

這是我建立的查詢字符串(簡稱位)

$URI = 'http://remote-interface-host/serviceurl?'; 

$querystring .= 'city='.urlencode(utf8_decode($town)); 
$querystring .= '&street='.urlencode(utf8_decode($street)); 
$querystring .= '&location='.urlencode(utf8_decode($location)); 
$querystring .= '&start='.$start; 
$querystring .= '&end='.$end; 
$querystring .= '&text='.urlencode(utf8_decode(trim($description))); 
$querystring .= '&title='.urlencode(utf8_decode(trim($title))); 
$querystring .= '&website='.urlencode(utf8_decode($website)); 

$textlanguage = '&languageid=1522908220065994400'; 
$querystring .= $textlanguage; 

$fullcurl = $URI.$querystring; 

$data = docurlcall($fullcurl); 

docurlcall()是非常簡單的,也從遠程接口

function docurlcall($url) 
{ 
    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 0, 
     CURLOPT_TIMEOUT => 10, 
     CURLOPT_URL => $url, 
     CURLOPT_POST => 1,  
     CURLOPT_USERAGENT => 'my-interface' 
    )); 

    $result = json_decode(curl_exec($curl)); 

    curl_close($curl); 

    return $result; 
} 

反饋是

{ "success":false, "message":"missing required parameter 'languageid'", }

據我所知,這應該是cURL的好用,所以我不明白爲什麼他放棄了最後一個參數。但也許這只是一個不同的問題的症狀。

任何想法可能是錯誤或失蹤?

注意旁邊:我被cURL卡住了,因爲外部接口的開發人員擔心數據可能會變得太大(爲了獲得更好的可讀性,我丟棄了圖像和更多信息),所以我必須做帶cURL的POST請求。

+0

echo'$ querystring'並直接運行到您的瀏覽器並檢查它返回的結果! – Saty

+0

這樣做很好,沒有問題或錯誤。 – flomei

+0

設置'CURLOPT_RETURNTRANSFER => 1'並檢查 – Saty

回答

1

這不是一個更好的設置來擺脫查詢字符串的生成,讓PHP爲你做的工作嗎?

$parameters = array(
    'city'  => urlencode(utf8_decode($town)), 
    'street'  => urlencode(utf8_decode($street)), 
    'location' => urlencode(utf8_decode($location)), 
    'start'  => $start, 
    'end'   => $end, 
    'text'  => urlencode(utf8_decode(trim($description))), 
    'title'  => urlencode(utf8_decode(trim($title))), 
    'website'  => urlencode(utf8_decode($website)), 
    'languageid' => '1522908220065994400' 
); 

$data = docurlcall(
    sprintf(
    "%s?%s", 
    "http://remote-interface-host/serviceurl", 
    http_build_query($parameters) 
) 
); 

這可以導致更簡單的錯誤搜索(至少更乾淨的代碼導致我更簡單的錯誤捕獲:))。

+0

謝謝,我會試試看。 – flomei

+0

那你有沒有找到解決辦法? –

+0

今天下午晚些時候到期,屆時我會通知你。 ;-) – flomei