gpt4 book ai didi

Java 小程序 HttpClient AccessControlException

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

我创建了一个小程序,它使用 Apache HTTP 组件中的 HttpClient。该小程序应该打开远程网页并将页面的源打印到控制台。从 IDE (NetBeans) 运行时,代码工作正常,但是在网页中部署时,它会抛出 AccessControlException:

access denied ("java.net.SocketPermission" "www.hardwarebase.net" "resolve")

在阅读有关该问题的类似问题后,问题似乎出在未签名的小程序中。我对其进行了自签名,因此当我下次运行它时,小程序会请求并获得权限。

尽管如此,我还是遇到了同样的异常。这是主小程序类的代码:

public class MyApplet extends java.applet.Applet {
public DefaultHttpClient client;
public String useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1";
public void init()
{
resize(150,25);

client = new DefaultHttpClient();
String page = Get("http://www.hardwarebase.net"));
System.out.println(page);

}

public String Get(String url)
{
final HttpUriRequest request = new HttpGet(url);
request.setHeader("User-Agent", useragent);
HttpResponse response;
try {
response = (HttpResponse)AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
try {
return client.execute(request);
} catch (IOException ex) {
Logger.getLogger(MyApplet.class.getName()).log(Level.SEVERE, null, ex);
}

return null;
}
}
);
return _getResponseBody(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}

return "";
}

public String Post(String url, List<NameValuePair> nameValuePairs)
{
final HttpPost request = new HttpPost(url);
request.setHeader("User-Agent", useragent);
try {
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response;

try {
response = (HttpResponse)AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
try {
return client.execute(request);
} catch (IOException ex) {
Logger.getLogger(MyApplet.class.getName()).log(Level.SEVERE, null, ex);
}

return null;
}
}
);
return _getResponseBody(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}

} catch (IOException e) {
e.printStackTrace();
}
return "";
}

public void paint(Graphics g)
{
g.drawString("Hello world!", 50, 25);
}

public String _getResponseBody(final HttpEntity entity) throws IOException, ParseException
{
if (entity == null) { throw new IllegalArgumentException("HTTP entity may not be null"); }
InputStream instream = entity.getContent();
if (instream == null) { return ""; }
if (entity.getContentLength() > Integer.MAX_VALUE) { throw new IllegalArgumentException("HTTP entity too large to be buffered in memory"); }
String charset = getContentCharSet(entity);
if (charset == null) { charset = HTTP.DEFAULT_CONTENT_CHARSET; }
Reader reader = new InputStreamReader(instream, charset);
StringBuilder buffer = new StringBuilder();
try
{
char[] tmp = new char[1024];
int l;
while ((l = reader.read(tmp)) != -1)
{
buffer.append(tmp, 0, l);
}
}
finally
{
reader.close();
}

return buffer.toString();

}

public String getContentCharSet(final HttpEntity entity) throws ParseException
{
if (entity == null) { throw new IllegalArgumentException("HTTP entity may not be null"); }
String charset = null;
if (entity.getContentType() != null)
{
HeaderElement values[] = entity.getContentType().getElements();

if (values.length > 0)
{
NameValuePair param = values[0].getParameterByName("charset");

if (param != null) { charset = param.getValue(); }
}
}

return charset;
}

}

如何解决此 AccessControlException?

最佳答案

我已经通过从 HttpClient 切换到 URLConnection 解决了该问题。我不知道为什么 URLConnection 不抛出异常,而 HttpClient 却抛出异常。

关于Java 小程序 HttpClient AccessControlException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799064/

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