code: async def oauth2_request(
          self,
          url: str,
          access_token: str = None,
          post_args: Dict[str, Any] = None,
          **args: Any
      ) -> Any:
          
          all_args = {}
          if access_token:
              all_args["access_token"] = access_token
              all_args.update(args)
  
          if all_args:
              url += "?" + urllib.parse.urlencode(all_args)
          http = self.get_auth_http_client()
          if post_args is not None:
              response = await http.fetch(
                  url, method="POST", body=urllib.parse.urlencode(post_args)
              )
          else:
              response = await http.fetch(url)
          return escape.json_decode(response.body)
docs: Fetches the given URL auth an OAuth2 access token.
  
          If the request is a POST, ``post_args`` should be provided. Query
          string arguments should be given as keyword arguments.
  
          Example usage:
  
          ..testcode::
  
              class MainHandler(tornado.web.RequestHandler,
                                tornado.auth.FacebookGraphMixin):
                  @tornado.web.authenticated
                  async def get(self):
                      new_entry = await self.oauth2_request(
                          "https://graph.facebook.com/me/feed",
                          post_args={"message": "I am posting from my Tornado application!"},
                          access_token=self.current_user["access_token"])
  
                      if not new_entry:
                          # Call failed; perhaps missing permission?
                          await self.authorize_redirect()
                          return
                      self.finish("Posted a message!")
  
          .. testoutput::
             :hide:
  
          .. versionadded:: 4.3
  
          .. versionchanged::: 6.0
  
             The ``callback`` argument was removed. Use the returned awaitable object instead.