gpt4 book ai didi

java - 为什么 Java 可以正确获取一个网页的内容,但不能正确获取另一个网页的内容?

转载 作者:行者123 更新时间:2023-11-29 07:52:31 26 4
gpt4 key购买 nike

我正在尝试获取 CSV 格式的网页以用作基本数据库。测试页在http://prog.bhstudios.org/bhmi/database/get , 浏览器打开没问题。但是,当我运行以下代码时,Java 会抛出 403 错误:

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main
{

static
{
Logger.getGlobal().setLevel(Level.ALL);
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException
{
InputStream is = null;
try
{
System.out.println("Starting...");
URL url = new URL("http://prog.bhstudios.org/prog/bhmi/database/get/");
URLConnection urlc = url.openConnection();
urlc.connect();
is = urlc.getInputStream();
int data;
while ((data = is.read()) != -1)
{
System.out.print((char)data);
}
System.out.println("\r\nSuccess!");
}
catch (IOException ex)
{
Logger.getGlobal().log(Level.SEVERE, ex.getMessage(), ex);
System.out.println("\r\nFailure!");
}
if (is != null)
is.close();
}
}

这是控制台输出:

Starting...
Nov 18, 2013 3:01:48 PM org.bh.mi.Main main
SEVERE: Server returned HTTP response code: 403 for URL: http://prog.bhstudios.org/prog/bhmi/database/get/
java.io.IOException: Server returned HTTP response code: 403 for URL: http://prog.bhstudios.org/prog/bhmi/database/get/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1626)
at org.bh.mi.Main.main(Main.java:36)
Failure!

请注意,403 表示服务器已开启并正确接受了请求,但拒绝进一步执行任何操作。现在更重要的是:如果我得到,比方说,http://example.com , 它工作得很好!

如何让我的 Java 应用程序从我的网络服务器读取此文件?

最佳答案

我针对您的服务器进行了测试,如果我提交请求 - 使用 TamperData - 使用 User-Agent: Java/1.6.0_14 (我只是选择了一个随机的 java 版本),您的网络服务器响应 403禁止。

我的浏览器显示以下错误消息:

Error 1010
Access denied
What happened?

The owner of this website (prog.bhstudios.org) has banned your access based on your browser's signature (cf7ab9f58210755-ua21).

换句话说,您的服务器(或者更可能是:您的代理,因为 header 都表明使用了 cloadflare-nginx 和 ASP.net)基于用户代理字符串进行过滤。这样做可能是为了防止机器人程序和屏幕抓取程序访问您的网站。

您要么需要删除此过滤器(询问您的代理管理员),要么为 URLConnection 设置不同的用户代理,请参阅 Setting user agent of a java URLConnectionHow to modify the header of a HttpUrlConnection

关于java - 为什么 Java 可以正确获取一个网页的内容,但不能正确获取另一个网页的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056762/

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