首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jsoup格式错误的url

Jsoup格式错误的url
EN

Stack Overflow用户
提问于 2012-05-16 23:08:37
回答 1查看 7K关注 0票数 3

我在使用JSoup连接到url时遇到问题。

我尝试测试的url是www.xbox.com/en-US/security,它是一个302(我想)重定向到http://www.xbox.com/en-US/Live/Account-Security的地址。我已经设置了jsoup来跟踪重定向,并使用.headers("location")获取新的url。返回的url为/en-US/Live/Account-Security。我不确定如何处理它,我的代码如下:

代码语言:javascript
复制
while (i < retries){
        try {
            response = Jsoup.connect(checkUrl)
                    .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
                    .followRedirects(false)
                    .timeout(10000)
                    .execute();
            success = true;
            break;
        } catch (SocketTimeoutException ex){
            timeout = true;
        }  catch (MalformedURLException ep){
            malformedUrl = true;
        }catch (IOException e) {
            statusCode = 404;
        }
    }

private void getStatus(){
    if (success){
        statusCode = response.statusCode();
        success = false;
    }
    if (statusCode >= 300 && statusCode <= 399){
        //System.out.println("redirect: " +statusCode + " " +checkUrl);
        checkUrl = response.header("location");
        //System.out.println(checkUrl);
        connect();
        getStatus();
    }
}

有没有人有关于如何处理这个问题的建议?或者我是否应该检查一下我的checkUrl = response.header("location");,看看它是否是一个有效的url,如果不是,就不要测试它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-17 02:02:21

首先要做的是:如果你试图访问"www.xbox.com/en-US/security",它会抛出一个MalformedException,因此不会将你重定向到你想要的地方。

还有一个问题是,我只使用布尔值变量success,如果捕获到任何异常,则将其设置为false。再说一次,我不知道你是不是在使用超时,或者错误的变量。

在那之后,我会说紧跟在IOException后面的那一行永远不会有用。我也不能说,因为我看不到完整的代码。

现在..。回答您的问题:返回的字符串是您提供的第一个URL中的一个域。简单地说就是这样:

代码语言:javascript
复制
//Assuming you won't ever change it, make it a final
//variable for less memory usage.
final String URL = "http://www.xbox.com/en-US/security";

//Whatever piece of processing here

//Some tests just to make sure you'll get what you're
//fetching:
String newUrl = ""
if (checkUrl.startsWith("/"))
    newUrl = URL + checkUrl;

if (checkUrl.startsWith("http://"))
    newUrl = checkUrl;

if (checkUrl.startsWith("www"))
    newUrl = "http://" + checkUrl;

这段代码将基本上确保您可以在urls中导航,而不需要获取一些MalformedUrlException。我建议将manageUrl()方法放在某个地方,并测试获取的网址是否在您要搜索的域中,否则您可能会在电子商务或公共网站中结束。

希望这会有帮助=)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10621403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档