HttpURLConnection连接方法无法连接

问题描述:

SocketAddress proxy = new InetSocketAddress("127.0.0.1", 8080); 
URL url = new URL("http://192.168.1.1/"); 

HttpURLConnection connection = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, proxy)); 
connection.setDoOutput(true); 
String body = "This is a body example"; 

OutputStreamWriter writer = new OutputStreamWriter(new BufferedOutputStream(connection.getOutputStream()), "8859_1"); 
writer.write(body); 
writer.flush(); 
writer.close(); 

connection.connect(); 

问题是,当我运行此代码时,没有任何请求被我的代理“捕获”(它配置良好)。我知道connect()是URLConnection中的一个抽象方法,但是假设HttpURLConnection正在扩展URLConnection,那么它就会覆盖它。这是javadoc关于connect()的说法:“如果此连接尚未建立,则打开通向该URL所引用资源的通信链接。”所以请求应该已经发送。任何人都知道是什么原因造成的问HttpURLConnection连接方法无法连接

注意:如果我将connection.connect()替换为connection.getResponseHeader(),我会捕获一个请求。正如我在javadoc中读到的,如果连接尚未设置,则调用getResponseHeader()将隐式调用connect()方法。

+0

试过吗? http://stackoverflow.com/a/32897878/584420 –

+0

@JamesJithin代理不是我的问题,因为正如帖子所说“如果我用connection.getResponseHeader()替换connection.connect(),连接建立并且请求正在抓取” – JAAAY

这就是javadoc关于connect()的说法:“如果这样的连接尚未建立,则打开通向此URL所引用资源的通信链接。”

正确。

所以请求应该已经发送。

非sequitur。关于发送请求,Thwre没有任何引用。

正如您所观察到的,请求被缓冲,直到您执行某个输入步骤。

+0

谢谢。我刚刚发现有一个TCP握手建立了。其实我认为这是不必要的,因为TCP连接可能在服务器端超时。不管怎么说,还是要谢谢你。 – JAAAY