allow all request-based variables to be passed in explicitly

if request is also passed in, the explicit value overrides the request value
if all required values are passed in, request need not be

this makes it possible to call directly without spoofing a request