gpt4 book ai didi

java - ReSTLet 客户端卡住 HTTPS 请求

转载 作者:行者123 更新时间:2023-11-30 04:31:12 31 4
gpt4 key购买 nike

我正在尝试使用 HTTPS 和 XML 帖子以及 ReSTLet 在 Java 中创建客户端-服务器应用程序。

我已经遵循了各种教程,并成功地运行了服务器端而没有出现问题(如果我使用浏览器连接到它,它会正确响应),但是当我启动客户端时,它们都会卡住:客户端未完成它的请求,服务器不再响应浏览器请求。

现在我使用的是 2.2 Milestone 1 版本,但我也尝试过 2.1.1 版本,但没有成功。我在 MacOSX 10.7.5 上使用 Eclipse Juno。这两个存储是使用 keytool 命令创建的(我创建了 serverKey.jks,导出了自签名证书并将其添加到 clientTrust.jks)。
我最初包含的 jar 是:

  • org.reSTLet
  • org.jssl.utils
  • org.reSTLet.ext.ssl

但我也尝试添加特定的连接器(单独,并在 libs readme.txt 中列出依赖项):

  • org.reSTLet.ext.httpclient.jar
  • org.reSTLet.ext.jetty.jar
  • org.reSTLet.ext.net.jar
  • org.reSTLet.ext.simple.jar

TestHTTPS 类

public class TestHTTPS extends Application{

public static void main(String[] args) throws Exception{
TestHTTPS t = new TestHTTPS();
t.testhttps();
}

public void testhttps() throws Exception{
Component comp = new Component();

Server server = comp.getServers().add(Protocol.HTTPS, 8183);

Series<Parameter> servParameters = server.getContext().getParameters();
servParameters.add("keystorePath", "serverKey.jks");
servParameters.add("keystorePassword", "password");
servParameters.add("keystoreType", "JKS");
servParameters.add("keyPassword", "password");
servParameters.add("tracing", "true");

comp.getDefaultHost().attach(new TestHTTPS());
server.start();

Context con = new Context();
Series<Parameter> clParameters = con.getParameters();

clParameters.add("truststorePath", "clientTrust.jks");
clParameters.add("truststoreType", "JKS");
clParameters.add("truststorePassword", "password");

Client restletClient = new Client(con, Protocol.HTTPS);
Reference resourceRef = new Reference("https://localhost:8183/user/myself");

Request request = new Request(Method.POST, resourceRef);
request.getClientInfo().getAcceptedMediaTypes().add(new Preference<MediaType>(MediaType.TEXT_XML));

Response response = restletClient.handle(request);
System.out.println(response.getEntityAsText());

restletClient.stop();
server.stop();
}

@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/user/{id}", UserResource.class);
return router;
}
}

用户资源类

public class UserResource extends ServerResource {
@Post("xml")
public Representation sendPostResponse(){
return new StringRepresentation("<Document>content</Document>", MediaType.APPLICATION_XML);
}

@Get("xml")
public Representation sendGetResponse(){
return new StringRepresentation("<Document>content</Document>", MediaType.APPLICATION_XML);
}
}

控制台的唯一输出是:

Starting the internal [HTTPS/1.1] server on port 8183
Starting the internal [HTTPS/1.1] client

我做错了什么吗?

最佳答案

经过大量调查后,我发现以下解决了“启动内部 [HTTPS/1.1] 客户端”进程停滞的问题:

确保以下三个 JAR 位于您的构建路径中:

org.restlet.ext.net.jar
org.restlet.ext.ssl.jar
org.restlet.jar

关于java - ReSTLet 客户端卡住 HTTPS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614540/

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