java - 在 URL 中包含变量,返回错误页面

标签 java javascript html htmlunit

我正在尝试使用 HTMLUnit 访问 java 中的 URL。我使用的网站的工作方式是,对于网站上的搜索结果,它首先绘制搜索结果的第一页,然后更改为所选页面。我想要做的是访问特定页面,例如 21。URL 必须附加一个变量(例如 http://www.thomsonlocal.com/Electricians/UK/#||25 )。在我的浏览器上使用它可以在第一个页面最初加载后获得第 25 页,然后启动一个方法。(javascript 或 JQuery?)

我尝试对 URL 进行编码以转义竖线字符,但这会在网站上返回错误页面。

page = webClient.getPage("http://www.thomsonlocal.com/Electricians/UK/"+URLEncoder.encode("#||" , "UTF-8")+ 21);

我的问题是我在这里做错了什么?有没有办法找出 URL 中的变量传递到哪个方法?

最佳答案

#后面的部分是URI片段。它不遵循与表单数据相同的转义规则,而表单数据正是 URLEncoder.encode() 所做的(这意味着它不适用于 URL,这与普遍的看法相反)。

您需要的是此处的 URI 模板 (RFC 6570)。示例使用 this library :

public static void main(final String... args)
    throws URITemplateException, MalformedURLException
{
    final URITemplate template 
        = new URITemplate("http://www.thomsonlocal.com/Electricians/UK/#{+var}");

    final VariableMap map = VariableMap.newBuilder()
        .addScalarValue("var", "||25")
        .freeze();

    System.out.println(template.toURL(map));
}

这将(正确)打印:

http://www.thomsonlocal.com/Electricians/UK/#%7C%7C25

另一个解决方案,虽然不那么灵活,是使用 URI 构造函数:

final URI uri = new URI("http", "www.thomsonlocal.com",
    "/Electricians/UK/", "||25");

System.out.println(uri.toURL());

这也将打印正确的结果。

关于java - 在 URL 中包含变量,返回错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048048/

相关文章:

java - 尝试使用嵌套循环获取非重复数字..(二维数组)

java - 泛型类型类定义

javascript - Bootstrap 3.0 网格 - 如何垂直转置它们?

javascript - 应用程序切换后,iPad 显示网站/应用程序的错误状态

javascript - 如何使用 javascript 将选择中的值发送到 html 中的输入文本?

java - 我所有的 java 应用程序现在都抛出 java.awt.headlessexception

java - 关闭后重置 JDialog

javascript - 编辑现有的 PM2 进程

HTML:如何在元素的类属性中使用 href

html - 如何使我的文本位于复选框旁边而不是在其下方?