我正在开发一个界面,我收到一大堆事件数据,为另一个系统做准备,并通过基于Web的API将其推送到系统中。
接收和处理数据工作正常,但是当使用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,因为外部接口的开发人员担心GET请求数据可能会变得太大(我删除了图像和更多信息以获得更好的可读性),所以我必须这样做使用cURL的POST请求。
答案 0 :(得分: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)
)
);
这可以导致更简单的错误搜索(至少更干净的代码会让我更简单地捕获错误:)。