introduce WebRequest to wrap request and response