我想用cUrl这样调用一个页面:
$ch = curl_init();
$timeout = 0; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $this->url->link('account/order/invoice', 'order_id=20'));
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$invoice = curl_exec($ch);
curl_close($ch);
这不起作用。 " ORDER_ID = 20"没有传递给控制器。 这确实有效:
$ch = curl_init();
$timeout = 0; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'http://webshop.local/index.php?route=account/order/invoice&order_id=20');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$factuur = curl_exec($ch);
curl_close($ch);
当我回复$ this-> url->链接('帐户/订单/发票',' order_id = 20')时,网址是正确的。
我没有看到任何区别。我可以使用第二种方法,但第一种方法更适合在opencart中创建URL。
我想知道我做错了什么或为什么会这样。
答案 0 :(得分:2)
答案是网址不相同。
检查/system/url.php中的代码:
if ($args) {
$url .= str_replace('&', '&', '&' . ltrim($args, '&'));
}
您生成的网址为:
http://webshop.local/index.php?route=account/order/invoice&order_id=20
与您手写的相比:
http://webshop.local/index.php?route=account/order/invoice&order_id=20
这是因为帮助程序设计为输出打算在HTML中使用的URL ,其中&
将被正确解析。回收您生成的链接并查看页面来源,或查看您的商店链接,您就会明白我的意思。
如果您深入挖掘并查看帐户/帐户控制器的顶部,您会看到:
$this->redirect($this->url->link('account/login', '', 'SSL'));
重定向帮助程序(在system / engine / controller.php中)实际上必须再次转换&s
才能使用URL帮助程序创建的URL:
header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
因此,如果您想使用URL帮助程序,我建议您执行与OpenCart本身相同的操作:
curl_setopt ($ch, CURLOPT_URL, str_replace('&', '&', $this->url->link('account/order/invoice', 'order_id=20')));