gpt4 book ai didi

java - 使用 Apache 的 HttpClient 与使用 JDK 的 URLConnection 从 applet 中连接到 URL

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:33 25 4
gpt4 key购买 nike

在下面的代码中,我已验证如果使用 JDK 的 URLConnection 类,从小程序内连接到 URL 会保留浏览器的 session 。但是,如果使用 Apache 的 HttpClient 库,情况就不是这样了。有谁知道为什么?或者,我有没有办法将连接实例设置为由 HttpClient 实例使用?

import java.applet.Applet;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URISyntaxException;
import java.net.URL;

import javax.net.ssl.SSLException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

public class HttpClientTesterApplet extends Applet {
private static final long serialVersionUID = -1599714556710568947L;

public void testHttpClient() throws ClientProtocolException, IOException,
URISyntaxException {
URL url = new URL(String.format("%s://localhost:%s/%s/testHttpClient",
getParameter("protocol"), getParameter("port"),
getParameter("context")));

HttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(url.toURI());

System.out.println("Executing request " + post.getURI());

try {
System.out
.println(client.execute(post, new BasicResponseHandler()));
} catch (SSLException e) {
System.out.println(e.getMessage());
}

System.out.println("Executed request " + post.getURI());

System.out.println("Opening connection " + url);

HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();

System.out.println("Opened connection " + url);

urlConnection.setRequestMethod("POST");

System.out.println("Connecting");

urlConnection.connect();

System.out.println("Connected");

InputStream inputStream = urlConnection.getInputStream();

try {
while (inputStream.read() != -1) {
System.out.println("Reading");
}
} finally {
inputStream.close();
}
}
}

最佳答案

这是通过套接字实现自己的 URL 连接的库的常见问题。显然,URLConnection 类的JRE 实现可以直接获取浏览器信息。我们不得不采用上面 oscargm 提到的技术,即在应用程序服务器上将请求 cookie 写入小程序的参数并使用 JavaScript 获取浏览器的文档 cookie(这是针对 SSO 的情况,其中 cookie 集可能因中间代理——代理服务器而不同)。请注意,如果 cookie 是 HttpOnly——javascript 代码将失败。

关于java - 使用 Apache 的 HttpClient 与使用 JDK 的 URLConnection 从 applet 中连接到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216165/

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