gpt4 book ai didi

java - 如何使用 Java 从 Internet 读取文本文件?

转载 作者:行者123 更新时间:2023-12-02 05:18:34 25 4
gpt4 key购买 nike

我想阅读此 URL 中文本的第二行:“http://vuln2014.picoctf.com:51818/ ”(这是一场夺旗竞赛,但只要求旗帜或旗帜指示违反了竞赛规则)。我尝试从 URL 打开输入流,但收到无效的 HTTP 响应异常。感谢任何帮助,并且我认识到我的错误可能非常愚蠢。

代码:

URL url = new URL("http://vuln2014.picoctf.com:51818");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream()

错误发生在第三行。java.io.IOException:在 name.main(name.java:41) 处 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1342) 处的 Http 响应无效

curl 很乐意从页面获取文本,并且可以通过网络浏览器完全访问它。

最佳答案

当你这样做时:

URL url = new URL("http://vuln2014.picoctf.com:51818");
URLConnection con = url.openConnection();

您正在签订一份契约(Contract),其中规定此 URL 使用 http 协议(protocol)。当您调用 openConnection 时,它期望获得 http 响应,因为您在 URL 中使用了 http:// 作为协议(protocol)。 Java Documentation说:

If for the URL's protocol (such as HTTP or JAR), there exists a public, specialized URLConnection subclass belonging to one of the following packages or one of their subpackages: java.lang, java.io, java.util, java.net, the connection returned will be of that subclass. For example, for HTTP an HttpURLConnection will be returned, and for JAR a JarURLConnection will be returned.

您正在连接的服务器仅返回几行数据。我使用命令 nc vuln2014.picoctf.com 51818 检索它们。没有 http 响应代码 HTTP/1.1 200 OK:

Welcome to the Daedalus Corp Spies RSA Key Generation Service. The public modulus you should use to send your updates is below. Remember to use exponent 65537. b4ab920c4772c5247e7d89ec7570af7295f92e3b584fc1a1a5624d19ca07cd72ab4ab9c8ec58a63c09f382aa319fa5a714a46ffafcb6529026bbc058fc49fb1c29ae9f414db4aa609a5cab6ff5c7b4c4cfc7c18844f048e3899934999510b2fe25fcf8c572514dd2e14c6e19c4668d9ad82fe647cf9e700dcf6dc23496be30bb

在这种情况下,我将使用 java.net.Socket 建立连接,然后读取这些行。这是一种简单的方法,假设有 2 行数据:

Socket theSocket;
try {
theSocket = new Socket("vuln2014.picoctf.com", 51818);
BufferedReader inFile = new BufferedReader(new InputStreamReader(theSocket.getInputStream()));

String strGreet = inFile.readLine();
String strData = inFile.readLine();
} catch (IOException e) {
e.printStackTrace();
}

至于为什么curl和浏览器可以正常渲染呢?他们可能对读取的数据更加宽容,并且只会转储从端口读取的数据,即使它不符合指定的协议(protocol)(例如 http)

关于java - 如何使用 Java 从 Internet 读取文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com