URL 的 Java 状态 400

标签 java apache file download

您好 - 我正在尝试使用 Apache commons fileUtils 下载文件,但最终总是出现 400 错误。该文件的 URL 有效,因为我使用浏览器多次成功下载该文件。有什么想法吗?

java.io.IOException: Server returned HTTP response code: 400 for URL: http://www.nikaia-hosp.gr/img/ΤΕΛΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΓΙΑ ΥΠΕΡΗΧΟ ΓΥΝΑΙΚΟΛΟΓΙΚΟ ΜΑΙΕΥΤΙΚΟ ΠΡΟΓΕΝΝΗΤΙΚΟΥ ΕΛΕΓΧΟΥ.pdf at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) at java.net.URL.openStream(URL.java:1045) at org.apache.commons.io.FileUtils.copyURLToFile(FileUtils.java:1478) at com.nikaia.main.NikaiaReader.Downloader.download(Downloader.java:17) at com.nikaia.main.NikaiaReader.Downloader.main(Downloader.java:32)

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.io.FileUtils;

public class Downloader {

    public static void download(String url,String filename){

        //System.out.println("filename is : "+filename);
        try {
        //  FileUtils.copyURLToFile(new URL(url), new File("C:/downloads/"+filename));
                FileUtils.copyURLToFile(new URL(url), new File(PropertyReader.readProperty("ExtractedFilesPath")+"/"+filename));
            try {
                Thread.sleep(Integer.parseInt(PropertyReader.readProperty("downloadTimeout"))*1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String ar[]){
        download("http://www.nikaia-hosp.gr/img/ΤΕΛΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΓΙΑ ΥΠΕΡΗΧΟ ΓΥΝΑΙΚΟΛΟΓΙΚΟ ΜΑΙΕΥΤΙΚΟ ΠΡΟΓΕΝΝΗΤΙΚΟΥ ΕΛΕΓΧΟΥ.pdf","stupid.pdf");
    }
}

最佳答案

找到了好的答案,我检查了编码的浏览器 url 和 UTF-8 java 返回的 url,区别在于浏览器的 url 中有 %20 而 java 有 + 。 我在 java 中用 %20 替换了所有 + 及其工作原理。

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

import org.apache.commons.io.FileUtils;

public class Downloader {

    public static void download(String url, String filename) {

        try {

            String base = "http://www.nikaia-hosp.gr/img/";
            if (url.contains("http://www.nikaia-hosp.gr/img/")) {
                FileUtils.copyURLToFile(
                        new URL(base + URLEncoder.encode(url.replace(base, ""), "UTF-8").replaceAll("\\+", "%20")),
                        new File(PropertyReader.readProperty("ExtractedFilesPath") + "/" + filename));
            } else {
                FileUtils.copyURLToFile(new URL(url),
                        new File(PropertyReader.readProperty("ExtractedFilesPath") + "/" + filename));
            }

            try {
                Thread.sleep(Integer.parseInt(PropertyReader.readProperty("downloadTimeout")) * 1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String ar[]) {
        download(
                "http://www.nikaia-hosp.gr/img/ΤΕΛΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΓΙΑ ΥΠΕΡΗΧΟ ΓΥΝΑΙΚΟΛΟΓΙΚΟ ΜΑΙΕΥΤΙΚΟ ΠΡΟΓΕΝΝΗΤΙΚΟΥ ΕΛΕΓΧΟΥ.pdf",
                "stupid.pdf");
    }
}

关于URL 的 Java 状态 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533149/

相关文章:

linux - 如何从文件中提取单个字节 block ?

Java乘法运算行为

java - 获取 MongoDB 当前集合名称

apache - 如何在 Solr 4.6 中搜索 P_NAME(按字段名称并获取所有已编入索引的字段)

c - 是否可以将 zip 文件视为 apache 中的 documentRoot?

php - 保存自己的源代码(PHP)

java - 我如何在 Kotlin 中编写 Java 括号 "[ ]"?

java - 在具有跨度的 Android TextView 中一次换行两行

apache - 设置虚拟主机,不能再访问http ://localhost

python - r+ 和 w+ 模式之间的确切区别是什么?