Here is a way to do it:
file_get_contents('http://url.com/[...]/controller/action/');
Done! :)
Or you can override the request (so it seem like the request is to that action) and then just call Mage::run()
.
On a more serious note, depends a lot on what you are actually doing in that action. Do you need Magento instantiated, do you need the entire request flow and so on.
If you don't need the request flow and so on, you can do:
Mage::app();
require_once 'path/to/controller.php';
$my_controller = new YourController;
$my_controller->doSomething();
If you need more the you can start digging by looking at Mage::run()
function.
Another good starting point is api.php
, where you can see how to instantiate a lightweight version of Magento. Then just follow the request flow.
Looking at Alan's comment:
If your controller is an instance of Mage_Core_Controller_Varien_Action
(and your Magento controllers should be), you need to send a request object and a response object to the contructor:
public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
{
$this->_request = $request;
$this->_response= $response;
Mage::app()->getFrontController()->setAction($this);
$this->_construct();
}