我正在使用Laravel 5.3,我在App \ Console \ Kernel.php中的schedule()函数下有这一行。
$schedule->call('App\Http\Controllers\Controller@fetchXmlRpcResult')->everyMinute();
该函数有点繁琐,但它的主要内容是:获取数据库中找到的最后一条记录的时间戳,创建一个新的XML-RPC请求,询问新的记录,其中start_date为“DB中最后找到的时间戳” ,解码XML-RPC结果并插入数据库。
public static function fetchXmlRpcResult($user, $password, $account_id, $date)
{
$client = new Client('https://example.com/xmlapi/');
$client->setSSLVerifyPeer(false);
$client->setSSLVerifyHost(2);
$client->setCredentials($user, $password, CURLAUTH_DIGEST);
$parameters = [removed]
$request = new Request('getAccountData', $parameters);
$response = $client->send($request);
// removing the 401 HTTP Unauthorized header
$xml = (substr($response->raw_data, strpos($response->raw_data, "\r\n\r\n")+4));
// removing the OK HTTP header
$xml2 = (substr($xml, strpos($xml, "\r\n\r\n")+4));
$accountCDRs = xmlrpc_decode($xml2);
return $accountInfo;
}
当我在控制台中运行php artisan schedule:run
时,系统会提示我出现此错误:
Running scheduled command: App\Http\Controllers\Controller@fetchXmlRpcResult
XML-RPC: PhpXmlRpc\Helper\Http::parseResponseHeaders: HTTP error, got response: HTTP/1.1 401 Unauthorized
[Symfony\Component\Debug\Exception\FatalThrowableError]
Call to undefined function App\Helpers\xmlrpc_decode()
控制器使用App \ Helpers \ XmlHandler.php中的文件,在该文件中我使用以下类:
use PhpXmlRpc\Value;
use PhpXmlRpc\Request;
use PhpXmlRpc\Client;
HTTP响应是否会将其丢弃?我尝试通过浏览器执行相同的功能(也就是将函数放在http://example.com/update下的route.php中)并且它工作得很好。
答案 0 :(得分:0)
您应该尝试升级到最新版本的phpxmlrpc库。 它修复了一个错误,阻止它正确地用于使用curl进行使用basic / digest auth的调用。
然后,您可以删除尝试手动删除响应中的http标头以及响应的额外解析的行,并使用$response->value()