[docs]asyncdefsend(self,request:HttpRequest,url:str)->Response:""" Send the HTTP request using the provided URL. :param request: The HttpRequest object to be sent. :param url: The URL to which the request is sent. :return: The HTTP response received. """request=self._build_request(request,url)response=awaitself.http_client.send(request)# Add cache debugging headers if caching is being usedifresponse.extensions.get("hishel_from_cache"):response.headers["X-Cache"]="HIT"# Add Age header for cached responsescreated_at=response.extensions.get("hishel_created_at")ifcreated_atisnotNone:age=int(time.time()-created_at)response.headers["Age"]=str(age)elif"hishel_from_cache"inresponse.extensions:# hishel is present but response is not from cacheresponse.headers["X-Cache"]="MISS"returnresponse
def_get_default_user_agent(self)->str:""" Get the default user agent string. :return: The default user agent string. """try:returnf"harp/{__parsed_version__.major}.{__parsed_version__.minor}"exceptAttributeError:return"harp"def_get_updated_headers(self,request:HttpRequest,*,url:str)->list:""" Update the headers for the request. :param request: The HttpRequest object. :param url: The URL to which the request is sent. :return: A list of updated headers. """parsed_url=urlparse(url)request.headers["host"]=parsed_url.netlocifself.user_agent:request.headers["user-agent"]=self.user_agentreturnlist(request.headers.items())def_build_request(self,request:HttpRequest,url:str)->Request:""" Build the HTTP request. :param request: The HttpRequest object. :param url: The URL to which the request is sent. :return: The built HTTP request. """headers=self._get_updated_headers(request,url=url)remote_request=self.http_client.build_request(request.method,url,headers=headers,content=request.body,extensions={"harp":{**self.extensions}},)request.extensions["remote_method"]=remote_request.methodrequest.extensions["remote_url"]=str(remote_request.url)returnremote_request