Java网络编程HTTP代理的使用
来源:互联网 发布:java 分布式事务 编辑:程序博客网 时间:2024/06/01 01:34
Java网络编程HTTP代理的使用
HTTP协议中常用的方法有GET、POST等。若需要使用HTTP代理就要用到HTTP协议的CONNECT方法。
通过CONNECT方法将服务器作为跳板,让服务器代替用户去访问其它网页,最后将访问结果返回给用户。使用CONNECT方法需要使用TCP直接去连接。
public class Main { public static void main(String[] args) throws Throwable { Proxy proxy = new Proxy(Type.HTTP,new InetSocketAddress("xx.yy.zz.ddd",8411)); Socket s = new Socket(proxy); s.connect(new InetSocketAddress("61.135.169.125",80)); s.close(); } }
通过Proxy指定代理服务器,并与目标机器连接,最终将通过代理服务器访问目标机器。
当要自定义HTTP头信息时,则需要自定义请求,然后再连接。下面的代码先通过socket与代理服务器建立tcp连接,然后再发送http 方法为connect的请求报文,当收到200的响应码时,表示代理请求发送成功,随后便可以通过这个socket来使用代码访问目标网站了。
public static Socket getSocket(String host, int port, String proxyHost, int proxyPort) throws IOException { Socket sock = new Socket(); sock.setSoTimeout(10000); sock.connect(new InetSocketAddress(proxyHost, proxyPort), 2000); /** * http格式 RFC 2616 */ StringBuffer sb = new StringBuffer(); sb.append("CONNECT " + host + ":" + port + " HTTP/1.1\r\n"); sb.append("Host: " + host + ":" + port + "\r\n"); sb.append("User-Agent: Java/1.8.0_20\r\n"); sb.append("Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n"); sb.append("Proxy-Connection: Keep-Alive\r\n"); sb.append("bizId:ctrip\r\n"); sb.append("clientIp:127.0.0.1\r\n"); sb.append("\r\n"); sock.getOutputStream().write(sb.toString().getBytes()); byte[] tmpBuffer = new byte[1024]; InputStream socketInput = sock.getInputStream(); int len = socketInput.read(tmpBuffer, 0, tmpBuffer.length); if (len <= 0) { throw new SocketException("Invalid response from proxy"); } String proxyResponse = new String(tmpBuffer, 0, len, "UTF-8"); // HTTP/1.x 200 OK http 代理请求发送成功 if (proxyResponse.indexOf("200") != -1) { // 跳过此次交互的剩余数据 if (socketInput.available() > 0) { socketInput.skip(socketInput.available()); } // 代理连接成功, 返回socket进行后续读写 return sock; } else { throw new IOException("Fail to create Socket"); } }
参考
- https://stackoverflow.com/questions/7225873/how-to-connect-a-socket-server-via-http-proxy (通过http代理连接服务器)
- https://tools.ietf.org/html/rfc2616#page-7
- 图解HTTP
阅读全文
0 0
- Java网络编程HTTP代理的使用
- Java网络编程-代理
- 网络编程时使用代理的原因
- Java网络编程-代理2
- java使用代理访问网络
- java使用代理访问网络
- java使用代理访问网络
- java使用代理访问网络
- java使用代理访问网络
- Java网络编程(二)http
- winsock编程使用HTTP代理(一)
- Java 和 HTTP 的那些事(二) 使用代理
- Java 的 HTTP 代理设置
- anroid下网络编程及代理使用
- java中使用代理访问网络的几种方法
- java使用代理访问网络的几种方法
- Java中使用代理访问网络的几种方法
- java使用代理访问网络的几种方法
- 微信小程序7 文件和数据缓存api
- Javascript实现的一个简单的弹幕效果-优化版
- __uuidof的作用
- Struts(7)——OGNL表达式
- Offer
- Java网络编程HTTP代理的使用
- offer
- offer
- VUE2.0组件之间的传值
- offer
- java properties文件的读写操作
- offer
- 测试工具功能介绍
- offer