gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:08:54 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com