2017-02-18 146 views
0
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

回答

0

這就是javadoc關於connect()的說法:「如果這樣的連接尚未建立,則打開通向此URL所引用資源的通信鏈接。」

正確。

所以請求應該已經發送。

非sequitur。關於發送請求,Thwre沒有任何引用。

正如您所觀察到的,請求被緩衝,直到您執行某個輸入步驟。

+0

謝謝。我剛剛發現有一個TCP握手建立了。其實我認爲這是不必要的,因爲TCP連接可能在服務器端超時。不管怎麼說,還是要謝謝你。 – JAAAY