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)
继续,而不依赖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();
}
400是错误的要求。
您应该尝试urlcoder。编码(url,“UTF-8”)
而不是使用replaceAll
。
当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权限