2017-02-18 6 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(); 

問題は、私は私の代理で何の要求が「catchedない」され、このコードを実行すると(それがうまく設定されている)ということでの接続に失敗しました。私はconnect()がURLConnectionの抽象メソッドであることを知っていますが、HttpURLConnectionがURLConnectionを拡張しているので、それをオーバーライドすることになっています。これはjavadocがconnect()について言うことです: "このような接続がまだ確立されていなければ、このURLによって参照されるリソースへの通信リンクを開きます。"したがって、リクエストが送信されているはずです。問題の原因は誰でも知っていますか?HttpURLConnectionの接続方法は

注:connection.connect()をconnection.getResponseHeader()に置き換えた場合、私は要求を受け取ります。接続がまだ設定されていない場合はjavadocで読み込んだので、getResponseHeader()の呼び出しは暗黙的にconnect()メソッドを呼び出します。

+0

試してみましたか? http://stackoverflow.com/a/32897878/584420 –

+0

@JamesJithin Proxyは私の問題ではありません。なぜなら、「connection.connect()をconnection.getResponseHeader()に置き換えると、接続が確立され、 – JAAAY

答えて

0

これはjavadocがconnect()について言うことです: "このような接続がまだ確立されていない場合、このURLによって参照されるリソースへの通信リンクを開きます。

正しいです。

したがって、リクエストが送信されているはずです。

非連続。 Thwreはリクエストの送信についてあなたの見積もりには何もありません。

ご了承いただいたとおり、いくつかの入力手順を実行するまで、要求はバッファされます。

+0

ありがとうございます。私は、TCPハンドシェイクが確立していることを理解しました。実際には、これは一種のものだと思うのは、TCP接続がサーバー側でタイムアウトする可能性があるからです。とにかくありがとう。 – JAAAY