2016-05-06 209 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