java读取https的简单介绍

博主:adminadmin 2023-03-17 03:30:06 677

本篇文章给大家谈谈java读取https,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java如何获取https协议的客户端ip地址

嗨 你好

据网上了解到:

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将:2046/ 的URL反向代理为 / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问 /index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

于是可得出获得客户端真实IP地址的方法一:

public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }

可是当我访问 /index.jsp/ 时,返回的IP地址始终是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110了,而我访问:2046/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去验证。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 项默认是为on,如果 forwarded_for 设成了 off  则:X-Forwarded-For: unknown

于是可得出获得客户端真实IP地址的方法二:

public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }

可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串Ip值,究竟哪个才是真正的用户端的真实IP呢?

答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。

如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100用户真实IP为: 192.168.1.110

希望可以帮到你的忙

祝你学习愉快

怎样用java调用https接口

下面这个函数可以直接用:

public static String requsetUrl(String urls) throws Exception{

BufferedReader br = null;

String sTotalString= "";

try{

URL url = new URL(urls);

URLConnection connection = url.openConnection();

connection.setConnectTimeout(3000);

connection.setDoOutput(true);

String line = "";

InputStream l_urlStream;

l_urlStream = connection.getInputStream();

br = new BufferedReader(new InputStreamReader(l_urlStream, "UTF-8"));

while ((line = br.readLine()) != null) {

sTotalString += line + "\r\n";

}

} finally {

if(br!=null){

try {

br.close();

} catch (IOException e) {

br = null;

}

}

}

return sTotalString;

}

java 获取url中是http还是https

先调用 java.net.URL.toURI() 转成 URI

再获取 java.net.URI.getScheme()

示例:

    public static void main(String[] args) throws MalformedURLException,URISyntaxException{

        URL url = new URL("");

        URI uri = url.toURI();

        System.out.println(uri.getScheme());

    }

结果:

https

如何使用JAVA请求HTTPS

//处理http请求  requestUrl为请求地址  requestMethod请求方式,值为"GET"或"POST"

public static String httpRequest(String requestUrl,String requestMethod,String outputStr){

StringBuffer buffer=null;

try{

URL url=new URL(requestUrl);

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

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setRequestMethod(requestMethod);

conn.connect();

//往服务器端写内容 也就是发起http请求需要带的参数

if(null!=outputStr){

OutputStream os=conn.getOutputStream();

os.write(outputStr.getBytes("utf-8"));

os.close();

}

//读取服务器端返回的内容

InputStream is=conn.getInputStream();

InputStreamReader isr=new InputStreamReader(is,"utf-8");

BufferedReader br=new BufferedReader(isr);

buffer=new StringBuffer();

String line=null;

while((line=br.readLine())!=null){

buffer.append(line);

}

}catch(Exception e){

e.printStackTrace();

}

return buffer.toString();

}

java file可以读取链接中的内容吗 如:ile("https://);里面是个图片链接地址

http的话就用httpclient。open后,可以返回一个InputStream。这个就是你要读到文件流。 原理的话,参考你用浏览器打开这个链接显示的内容。 这个返回的是一个HTML网页,需要你解析出里面的文字(一般来说取body中间的内容就行) 其实对于这种文件一般用FTP来下载的。楼上写的那个不对,哈哈。 需要的话自己最好去查一下,怎么用,我有代码,不过告诉你的话也不太好? URL url = new URL("http://你的地址"); URLConnection connection = url.openConnection(); InputStream is = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is,"gb2312")); 下面就是解析这个字符串来,自己来吧

关于java读取https和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。