当前位置: 首页 > 知识库问答 >
问题:

URL的Java状态400

孟沛
2023-03-14

你好--我正试图使用Apache commons fileUtils下载一个文件,但它总是以400错误告终。文件的URL是有效的,因为我使用浏览器成功下载了它很多次。有什么想法吗?

java.io.ioException:服务器返回HTTP响应代码:400 for url:HTTP://www.nikaia-hosp.gr/img/toε∑πρρΔΔ)αρρΦ∑∑️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️.pdf在sun.net.www.protocol.HTTP.httpurlconnection.getInputstream0(httpurlconnection.java:1894)在1045)在org.apache.commons.io.fileutils.copyurltoFile(Fileutils.java:1478)在com.nikaa.main.nikaiareader.downloader.downloader(downloader.java:17)在com.nikaa.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");
    }
}

共有1个答案

柯波峻
2023-03-14

好的答案找到了,我检查了编码的浏览器url和UTF-8 java返回的url,不同的是浏览器的url中有%20,而java有+。我在java中用%20替换了all+及其工作状态。

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");
    }
}
 类似资料:
  • 我正在尝试从这里连接并检索页面标题。如果我从链接中删除“.com”之后的所有内容,代码运行良好。以下代码不起作用: 如果代码有效,返回的标题应该是“Sammamish Washington-Google News”。代码返回的错误是:“org.jsoup.HttpStatusException:HTTP错误获取URL。状态=405,URL=https://news.google.com/news/

  • JSoup似乎可以处理我尝试过的所有URL,但这一个给了我400个错误。 我得到的错误是:

  • 我用的是和Gradle的协议。是否可以从状态更改URL捕获响应?例如,我正在向数据库中添加一条新记录。提供程序创建一个唯一的id,该id必须用于该记录的其他操作。

  • 问题内容: 我正在阅读Java EE 6教程,试图理解无状态会话bean和有状态会话bean之间的区别。如果无状态会话bean在方法调用之间没有保持其状态,为什么我的程序按原样运行? 客户端 我原本希望getNumber每次都返回0,但它返回1,并且在浏览器中重新加载servlet会使它更多。问题在于我对无状态会话Bean如何工作的理解,而与库或应用程序服务器无关。有人可以给我一个无状态会话bea

  • 我正在写一个小程序,我想从网站上获取一个元素。我已经学习了许多教程来学习如何使用jSoup编写此代码。我想打印的一个例子是“2018年11月19日星期一下午3:00至7:00”。我遇到了错误 这是我的代码: 谢谢你的帮助。

  • 在我开发的一个应用程序上,我试图为应用程序的页面保留一个好的、可读的url。我从url开始,如下所示:http://somedomain.com/context/?param1=value getRequestCycle()。setResponsePage(新建其他页面(obj1、obj2、pageParameters) 在这里,目标1和目标2是初始化页面所需的对象。正如我从这篇文章中理解的那样,