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

获取URL时出错。状态=400

邵星河
2023-03-14

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

String url = "http://localad.walmart.com?storeref=3008&forceview=y";

Response response = Jsoup.connect(url.replaceAll(" ", "%20"))
    .method(Method.GET)
    .userAgent("Mozilla")
    .followRedirects(false)
    .timeout(5000)
    .data("pragma", "no-cache")
    .execute(); 

我得到的错误是:

Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=400, URL=http://localad.walmart.com?storeref=3008&forceview=y&pragma=no-cache
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178)

共有3个答案

申屠黎昕
2023-03-14

继续,而不依赖JSoup来解析中间地址(重定向的URL)。我需要最终的重定向URL(JSoup在使用该URL时没有问题),因此使用以下代码获得该URL。

import java.net.URI;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolException;
import org.apache.http.impl.client.DefaultRedirectStrategy;
import org.apache.http.protocol.HttpContext;

public class MyRedirectHandler extends DefaultRedirectStrategy {

    public URI lastRedirectedUri;

    @Override
    public boolean isRedirected(HttpRequest request, HttpResponse response, 
        HttpContext context) {
    try {
        return super.isRedirected(request, response, context);
     } catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
    }

    @Override
    public URI getLocationURI(HttpRequest request, HttpResponse response, HttpContext context)
        throws ProtocolException {

        lastRedirectedUri = super.getLocationURI(request, response, context);
        return lastRedirectedUri;
    }

调用代码:

    DefaultHttpClient httpclient = new DefaultHttpClient();
    String url2 = "http://localad.walmart.com/walmart/new_user_entry.aspx?storeref=3008&forceview=y";
    MyRedirectHandler handler = new MyRedirectHandler();
    httpclient.setRedirectStrategy(handler);

    HttpGet get = new HttpGet(url2);
    httpclient.execute(get);

    String lastUrl = url2;
    if (handler.lastRedirectedUri != null) {
        lastUrl = handler.lastRedirectedUri.toString();
    }
公冶俊达
2023-03-14

400是错误的要求。

您应该尝试urlcoder。编码(url,“UTF-8”)而不是使用replaceAll

严知
2023-03-14

当JSoup在400个错误请求上抛出致命异常时,会有点烦人,因为这会完全终止任何正在运行的进程,即使是包装在try/catch中。但是嘿。

有一个解决方案,在您的初始连接URL上,附加该方法;

.ignoreHttpErrors(true)

例如;

Jsoup.connect(url).ignoreHttpErrors(true).execute().statusCode();

这将为您提供官方的“400”状态代码,而不是引发致命的异常。

我知道这是一个老帖子,但张贴作为参考,因为我在寻找解决这个问题的方法时遇到了这个线程。

 类似资料:
  • 我使用JSOUB清理所有网页,如下所示: 但我的问题是,代码一开始运行良好。 过一会儿,它会停止,总是给我“HTTP错误获取URL。状态=503错误”。 当我添加时。ignoreHttpErrors(true)它可以正常工作,但不会刮伤web。 *搜索词是我想要搜索的任何关键字,num是我需要检索的页数。 有人能帮忙吗?这是否意味着谷歌阻止了我的IP刮取?如果是的话,请问有什么解决方案或者我如何替

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

  • 使用Jsoup连接到时https://rateyourmusic.com通过localhost,它工作得很好,然而,在Heroku上,我总是收到错误503,即使使用userAgent Heroku日志: 如果我尝试连接到Heroku上的另一个网站,它可以工作。 提前谢谢。

  • 我正在尝试从站点获取数据。当我在Intellij IDEA中使用此代码时,一切正常,但当我在Android Studio和real device中使用此代码时,我得到: org.jsoup.HttpStatusException:获取URL的HTTP错误。状态=403 这是我的代码: 我找到的所有信息都是关于“userAgent()”方法的,但它没有帮助。 UPD:对不起,这是我的问题。正确的网址

  • 我想连接到https://www.notebooksbilliger.de/但对于以下代码,它不起作用: 为什么我得到405状态?我如何解决这个问题? 非常感谢... 塞巴斯蒂安

  • 我只是下载了最新版本的j汤(1.7.1)并遵循官方代码(更改了url)。然后我得到了“超文本传输协议错误获取url” 我的代码有什么问题?似乎错误只是发生在Android项目,因为我在一个工作正常的Java项目做同样的事情。 注意:-我已经添加了Internet权限