CodeGym /Java 课程 /模块 3 /使用 HttpRequest 发出请求

使用 HttpRequest 发出请求

模块 3
第 10 级 , 课程 1
可用

方法 newBuilder(), build()

HttpRequest类用来描述一个http-request,从名字就很容易理解。这个对象本身什么都不做,它只是包含有关 http 请求的各种信息。因此,正如您可能已经猜到的那样,Builder 模板也用于创建它。

HttpRequest request = HttpRequest.newBuilder()
	.method1()
	.method2()
	.methodN()
    .build();

在调用方法newBuilder()build()之间,您需要调用所有方法来构造对象HTTP请求.

一个简单请求的示例如下所示:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(“http://codegym.cc”))
    .build();
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

您可以在官方文档的链接中找到HttpRequest类的所有方法。

然后我们将分析其中最受欢迎的。

uri() 方法

使用uri()方法,您可以设置 http 请求将发送到的 URI(或 URL)。例子:

HttpRequest request = HttpRequest.newBuilder()
    .uri( URI.create(“http://codegym.cc”) )
    .build();

顺便说一下,您可以通过将 URI 直接传递给newBuilder()方法来缩短这段代码:

HttpRequest request = HttpRequest.newBuilder( URI.create(“http://codegym.cc”) ).build();

重要的!可以通过两种方式创建 URI:

  • newURI(字符串)
  • URI.create(字符串)

第二种方式更可取。不幸的是,第一种方法不是很好,因为 URI 构造函数被声明为public URI(String str) throws URISyntaxException,而URISyntaxException是一个已检查的异常。

方法 GET()、POST()、PUT()、DELETE()

您可以使用以下方法设置 http 请求方法:

  • 得到()
  • 邮政()
  • 放()
  • 删除()

这是一个简单的 GET 请求的样子:

HttpRequest request = HttpRequest.newBuilder()
  .uri(new URI("https://codegym.cc"))
  .GET()
  .build();

版本() 方法

您还可以设置 HTTP 协议版本。只有2个选项:

  • HttpClient.版本.HTTP_1_1
  • HttpClient.版本.HTTP_2

假设您想使用 HTTP/2 协议创建请求,那么您需要编写:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .version( HttpClient.Version.HTTP_2 )
   .GET()
   .build();

很简单,不是吗?:)

超时() 方法

您还可以设置查询执行时间。如果它通过并且请求从未完成,将抛出HttpTimeoutException

时间本身是使用对象设置的期间来自 Java 日期时间 API。例子:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .timeout( Duration.of(5, SECONDS) )
   .GET()
   .build();

此方法的存在表明HttpClientHttpRequest类可以执行各种任务。想象一下,您正在执行一个请求,网络发生了一些事情并且持续了 30 秒。立即接收到异常并正确地做出反应要有用得多。

标头() 方法

您还可以向任何请求添加任意数量的标头。而且它和其他任何事情一样容易做。为此有一个特殊的方法 - header()。例子:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .header("name1", "value1")
   .header("name2", "value2")
   .GET()
   .build();

还有另一种方法可以一次设置多个标头。例如,如果您将标题列表转换为数组,它可能会派上用场:

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("name1", "value1", "name2", "value2")
   .GET()
   .build();

基本的一切都很简单。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION