Java怎么设置代理来访问网络?

Java怎么设置代理来访问网络?,第1张

你的问题应该是:在java中通过编程设置代理服务器并访问网络,现在作答如下:

1,讲解一下基础知识:

HTTP:是应用层协议,是基于传输层协议的。

TCP: 是传输层协议,是基于网络层协议的。

IP: 是网络层协议。

一个TCP的连接要进行三次握手(就像转户口一样,不详说),HTTP只是一个应用协议,也就是相当于一个自定义协议,即其没有对底层的传输方式进行干涉,只是对数据内容格式进行了定义。

2,我们再说说HTTP代理,从上可以理解,HTTP代理服务器就是这样一台机器:你把所有的HTTP请求都发到这个 HTTP代理服务器,然后这个HTTP代理服务器请求你要访问的最终地址,把响应回传给你。这里还要注意它代理的是HTTP协议,而HTTP又是基于 TCP的,也就是说这个服务器代理的是指定HTTP内容格式的TCP连接。再说下去也没意思了,看以下代码:

//以下地址是代理服务器的地址

Socket socket = new Socket("10.1.2.188", 80)

//写与的内容就是遵循HTTP请求协议格式的内容,请求百度

socket.getOutputStream().write(new String("GET http://www.baidu.com/ HTTP/1.1\r\n\r\n").getBytes())

byte[] bs = new byte[1024]

InputStream is = socket.getInputStream()

int i

while ((i = is.read(bs)) >0) {

System.out.println(new String(bs, 0, i))

}

is.close()

3,当然在Java中,有Proxy代理上网的使用,此时使用URL(HTTP)就不涉及Socket(TCP)了,看如下代码

//设置代理

System.setProperty("http.proxySet", "true")

System.setProperty("http.proxyHost", "10.1.2.188")

System.setProperty("http.proxyPort", "80")

//直接访问目的地址

URL url = new URL("http://www.baidu.com")

URLConnection con = url.openConnection()

InputStreamReader isr = new InputStreamReader(con.getInputStream())

char[] cs = new char[1024]

int i = 0

while ((i = isr.read(cs)) >0) {

System.out.println(new String(cs, 0, i))

}

isr.close()

在编写代理服务器之前,首先应该明白一点,Java的代理机制,如图所示:

那么Java就处于中间这层代理服务器,代理服务器所作的事情如下:

         1、接收客户端请求,进行处理,然后发送给服务端

         2、接收服务端响应,进行处理,然后发送给客户端

         这样,就更清晰了,Java提供了代理的API为,java.net.Proxy类。此类表示代理设置,通常为类型(http、socks)和套接字地址。Proxy 是不可变对象。

 

         也就是说Java可以制作高级协议的代理,如 HTTP 或 FTP。也可以制作SOCKS(V4 或 V5)代理。

         首先,使用到了URL类,HttpURLConnection类及其我们的代理类Proxy类。他们都位于java.net包中。

第一步:生成代理,指定端口为8888:

第二步:使用URLConnection类进行连接www.moonsos.com

第三步:打开URL,并且读取HTML源码

在JAVA中怎么设置代理服务器呢,非常简单

public void setServiceProxy(Config config) {

    this.config = config

    System.setProperty("http.proxyHost", config.getProxyHost())

    System.setProperty("http.proxyPort", config.getProxyPort())

    System.setProperty("https.proxyHost", config.getProxyHost())

    System.setProperty("https.proxyPort", config.getProxyPort())

  }

然后在每一个HttpUrlConnection请求中,设置代理服务器用户名和密码,并进行Base64加密(看你代理服务器的要求,可能因代理服务器不同而不同),代码如下

private HttpURLConnection getProxyHttpConnection() throws IOException {

    String authorization = config.getProxyUser() + ":"

        + config.getProxyPassword()

    URL url = new URL(config.getRequestUrl())

    HttpURLConnection conn = (HttpURLConnection) url.openConnection()

    conn.setRequestProperty("Proxy-Authorization",

        "Basic " + Base64.encodeBase64String(authorization.getBytes()))

    return conn

  }


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/6434806.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-22
下一篇2023-03-22

发表评论

登录后才能评论

评论列表(0条)

    保存