- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用以下代码连接到使用 HtmlUnit 的页面:
WebClient webClient = new WebClient();
webClient.getOptions().setThrowExceptionOnScriptError(false);
HtmlPage loginPage = webClient.getPage(WEBSPHERE_URL);
但我总是收到这个错误:
18:06:00,390 ERROR [stderr] (Refresh Thread: Equinox Container: 90609616-a614-0017-138e-e6e4aa4a0871) com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 401 Unauthorized for https://portal-intranet.ti.sabesp.com.br/wps/myportal
18:06:00,390 ERROR [stderr] (Refresh Thread: Equinox Container: 90609616-a614-0017-138e-e6e4aa4a0871) at com.gargoylesoftware.htmlunit.WebClient.throwFailingHttpStatusCodeExceptionIfNecessary(WebClient.java:576)
18:06:00,390 ERROR [stderr] (Refresh Thread: Equinox Container: 90609616-a614-0017-138e-e6e4aa4a0871) at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:401)
当我尝试使用浏览器访问 URL 时,它运行良好。我应该怎么做才能解决这个问题?
更新
现在我收到这个错误:
21:43:35,746 ERROR [osgi.logging.setup_environment] (Thread-257) [br.com.sabesp.setupenvironment.portlet.SetupEnvironmentAction(2427)] The activate method has thrown an exception : java.lang.LinkageError: loader constraint violation: when resolving method "com.gargoylesoftware.htmlunit.WebClient.setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V" the class loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) of the current class, br/com/sabesp/setupenvironment/importer/util/WebContentUtil, and the class loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) for the method's defining class, com/gargoylesoftware/htmlunit/WebClient, have different Class objects for the type org/apache/http/client/CredentialsProvider used in the signature
当我尝试这样做时:
DefaultCredentialsProvider userCredentials = new DefaultCredentialsProvider();
userCredentials.addCredentials("username", "password");
webClient.setCredentialsProvider(userCredentials);
我正在使用基于 OSGi 框架的 Liferay DXP,我也在使用 Gradle。
最佳答案
你似乎是针对一个 Intranet 网站运行的,我猜这可以从浏览器中检测到你的用户名。
通过 HtmlUnit
,您可以使用 NTLM 身份验证:
DefaultCredentialsProvider credentialsProvider =
(DefaultCredentialsProvider) webClient.getCredentialsProvider();
credentialsProvider.addCredentials("username", "password");
//OR
credentialsProvider.addNTLMCredentials("username", "password", null, -1, "localhost", "domain");
您还可以启用流量日志以查看需要哪种类型的身份验证:
LogManager.getLogger("org.apache.http.wire").setLevel(Level.ALL);
更新:
您似乎有冲突的 httpclient
jar,请删除其中一个。
下面的代码会告诉正在使用的是哪一个:
System.out.println(CredentialsProvider.class.getProtectionDomain()
.getCodeSource().getLocation());
关于java - 失败的 HttpStatusCodeException : 401 Unauthorized acess using HtmlUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101058/
在我的 Restful Web 服务中,如果出现错误请求 (5xx) 或 4xx 响应代码,我会在响应中写入自定义 header “x-app-err-id”。 在客户端,我使用 RestTempla
我正在尝试使用以下代码连接到使用 HtmlUnit 的页面: WebClient webClient = new WebClient(); webClient.getOptions().setThro
这个问题已经有答案了: When HttpStatusCodeException exception raised? (3 个回答) 已关闭 4 年前。 org.springframework.web
我刚遇到那个问题,不明白为什么会这样。 客户端片段: try { ResponseEntity response = this.restTemplate.exchange(uri, HttpM
我不能使用多个 catch 吗?第一次捕获使用 RestClientException ,第二次捕获使用 HttpStatusCodeException try { Respons
我是一名优秀的程序员,十分优秀!