Java URIBuilder位于loader的未命名模块中';app&x27;

Java URIBuilder位于loader的未命名模块中';app&x27;,java,get,uri,Java,Get,Uri,我想执行GET请求: HttpGet request = new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION); URIBuilder uriBuilder = new URIBuilder(request.getURI()) .addParameter("code", "001") .addParameter("name", &

我想执行GET请求:

    HttpGet request = new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION);
    URIBuilder uriBuilder = new URIBuilder(request.getURI())
            .addParameter("code", "001")
            .addParameter("name", "AAA")
           

    String auth = user + ":" + mdp;

    byte[] encodedAuth = Base64.encodeBase64(
            auth.getBytes(StandardCharsets.ISO_8859_1));

    String authHeader = "Basic " + new String(encodedAuth);

    request.setHeader(HttpHeaders.AUTHORIZATION, authHeader);

    HttpClient client = HttpClientBuilder.create().build();
    HttpResponse response = client.execute((HttpUriRequest) uriBuilder);

    int statusCode = response.getStatusLine().getStatusCode();
当我试图捕获我的HTTPResponse
client.execute((HttpUriRequest)uriBuilder)时
我有一个错误:

java.lang.ClassCastException: class org.apache.http.client.utils.URIBuilder cannot be cast to class org.apache.http.client.methods.HttpUriRequest (org.apache.http.client.utils.URIBuilder and org.apache.http.client.methods.HttpUriRequest are in unnamed module of loader 'app')

您正面临此错误,因为您正试图将
URIBuilder
的实例强制转换为
HttpUriRequest

为了执行HTTP请求,您需要创建适当的实现

在您的用例中,我想应该是这样的:

URIBuilder URIBuilder=新的URIBuilder(URL由基本身份验证保护)
.addParameter(“代码”,“001”)
.addParameter(“名称”、“AAA”);
URI=uriBuilder.build();
HttpGet请求=新的HttpGet(uri);
字符串auth=user+“:”+mdp;
字节[]encodedAuth=Base64.encodeBase64(
auth.getBytes(StandardCharsets.ISO_8859_1));
字符串authHeader=“Basic”+新字符串(encodedAuth);
setHeader(HttpHeaders.AUTHORIZATION,authHeader);
HttpClient client=HttpClientBuilder.create().build();
HttpResponse response=client.execute(请求);
int statusCode=response.getStatusLine().getStatusCode();
您的评论似乎是试图使用SSL连接到站点:问题是您的Java代码不信任服务器

您需要配置一个有效的证书链,并指示代码使用它来解决问题

Apache客户端不依赖标准JSSE机制来实现此目的。相反,您需要使用适当的
TrustManager
配置
SSLContext
。请参阅以下代码(第一部分来自Android开发者网站):

//加载您的服务器证书
CertificateFactory cf=CertificateFactory.getInstance(“X.509”);
InputStream输入=新的BufferedInputStream(
新文件输入流(“server.crt”)
);
证书;
试一试{
证书=cf.generateCertificate(输入);
}最后{
input.close();
}
//创建包含服务器证书的内存中密钥库
//配置TrustManager时需要此选项
字符串keyStoreType=KeyStore.getDefaultType();//JKS
KeyStore KeyStore=KeyStore.getInstance(keyStoreType);
load(null,null);
keyStore.setCertificateEntry(“cert”,certificate);
//创建信任密钥库中服务器证书的TrustManager
TrustManagerFactory TrustManagerFactory=TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm()
);
trustManagerFactory.init(密钥库);
//创建使用TrustManager的SSLContext
SSLContext context=SSLContext.getInstance(“TLS”);
init(null,trustManagerFactory.getTrustManagers(),null);
//现在,实际的Apache客户机部分
//创建一个SSLConnectionSocketFactory,并将上面创建的SSLContext传递给它
SSLConnectionSocketFactory工厂=
新的SSLConnectionSocketFactory(sslcontext,新的NoopHostnameVerifier()
);
//创建实际的HttpClient
CloseableHttpClient客户端=HttpClient客户端
.custom()
.setSSLSocketFactory(工厂)
.build()
;
//使用此客户端执行HTTP调用
HttpResponse response=client.execute(请求);
int statusCode=response.getStatusLine().getStatusCode();

您可以从浏览器或使用类似于
openssl
的工具获取服务器证书。请看这篇文章。

谢谢你的回答!我现在有此错误:
PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
欢迎您。该问题似乎与服务器SSL证书有关。请看更新后的答案。@14有效吗?您能够测试建议的解决方案吗?@jccamparneo是的,它可以工作,忘记接受您的答案谢谢!不客气。请不要担心。我很高兴听到它工作得很好。