如何在 Java 中执行 HTTP GET? [复制]

Posted

技术标签:

【中文标题】如何在 Java 中执行 HTTP GET? [复制]【英文标题】:How do I do a HTTP GET in Java? [duplicate] 【发布时间】:2010-12-01 22:11:59 【问题描述】:

如何在 Java 中执行 HTTP GET?

【问题讨论】:

***.com/q/2793150/632951 【参考方案1】:

如果你想串流任何网页,你可以使用下面的方法。

import java.io.*;
import java.net.*;

public class c 

   public static String gethtml(String urlToRead) throws Exception 
      StringBuilder result = new StringBuilder();
      URL url = new URL(urlToRead);
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
      try (BufferedReader reader = new BufferedReader(
                  new InputStreamReader(conn.getInputStream()))) 
          for (String line; (line = reader.readLine()) != null; ) 
              result.append(line);
          
      
      return result.toString();
   

   public static void main(String[] args) throws Exception
   
     System.out.println(getHTML(args[0]));
   

【讨论】:

cletus 的答案(使用 Apache HttpClient)的优点之一是 HttpClient 可以自动为您处理重定向和代理身份验证。您在此处使用的标准 Java API 类不适合您。另一方面,使用标准 API 类的好处是您不需要在项目中包含第三方库。 URL 类也无法获取解码结果的字符集。 很好的例子,但最好捕获 IOException 而不是“一般”异常。 需要设置超时时间,否则当前线程可能被阻塞。见setConnectTimeoutsetReadTimeout 上述解决方案使读取的长度等于行长度,即使 HTML 没有,AFAIK,有行的概念。它还丢弃 CR 和 LF 字符。另一种选择:int readSize = 100000; int destinationSize = 1000000; char[] destination = new char[destinationSize]; int returnCode; int offset = 0; while ((returnCode = bufferedReader.read(destination, offset, readSize)) != -1) offset += returnCode; if (offset >= destinationSize) throw new Exception(); bufferedReader.close(); return (new String(destination)).substring(0, offset+returnCode+1);【参考方案2】:

如果您不想使用外部库,可以使用标准 Java API 中的 URL 和 URLConnection 类。

一个例子如下所示:

String urlString = "http://wherever.com/someAction?param1=value1&param2=value2....";
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
// Do what you want with that stream

【讨论】:

@HyLian:鉴于 OP 问题的明显程度,您的代码片段应该包含一个 try finally 来整理。 @Stephen C:当然,这只是一个代码片段,用于显示游戏中有哪些类以及如何使用它们。如果你把它放在一个真正的程序中,你应该播放异常规则:) InpuTSteam = 服务器发送给我们的所有获取? 您需要包含问题的“GET”部分 - 这错过了 GET - 请参阅下面的答案【参考方案3】:

从技术上讲,您可以使用直接的 TCP 套接字来做到这一点。不过我不会推荐它。我强烈建议您改用Apache HttpClient。在其simplest form:

GetMethod get = new GetMethod("http://httpcomponents.apache.org");
// execute method and handle any error responses.
...
InputStream in = get.getResponseBodyAsStream();
// Process the data from the input stream.
get.releaseConnection();

这里还有一个complete example。

【讨论】:

此项目已结束。【参考方案4】:

不需要第三方库的最简单方法是创建URL 对象,然后在其上调用openConnection 或openStream。请注意,这是一个非常基本的 API,因此您不会对标头进行太多控制。

【讨论】:

以上是关于如何在 Java 中执行 HTTP GET? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 在 Http Get 方法中设置 Cookie

高级表单验证 - 如何在用户完成后在字段旁边添加复选标记? --Javascript [关闭]

JAVA 线程池 其中一个线程执行失败 则线程重新执行或者重新提交任务 急

java如何在多线程执行完后才执行其他任务

漏洞log4j2远程执行代码复现实操代码例子

java 方法 执行超时处理