2017-02-18 16 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을 확장하고 있다는 점을 감안할 때, URLConnection을 오버라이드한다고 가정합니다. 이것은 javadoc이 connect()에 대해 말하는 것입니다 : "아직 연결되지 않았다면이 URL이 참조하는 리소스에 대한 통신 링크를 엽니 다." 그래서 요청이 전송되어 있어야합니다. 문제의 원인을 아는 사람이 있습니까?HttpURLConnection 연결 방법이 연결되지 않습니다.

참고 : connection.connect()를 connection.getResponseHeader()로 바꾸면 요청을 받았습니다. 연결이 아직 설정되지 않은 경우 javadoc에서 읽었으므로 getResponseHeader()를 호출하면 connect() 메서드가 암시 적으로 호출됩니다.

+0

시도해 보셨습니까? http://stackoverflow.com/a/32897878/584420 –

+0

@JamesJithin 프록시는 내 문제가 아닙니다. 게시물에 "connection.connect()를 connection.getResponseHeader()로 바꾸면 연결이 설정되고 요청이" 감사합니다. – JAAAY

답변

0

이것은 javadoc이 connect()에 대해 말하는 것입니다. "연결이 아직 설정되지 않은 경우이 URL에서 참조하는 리소스에 대한 통신 링크를 엽니 다."

수정.

그래서 요청을 보내야합니다.

비 연속. Thwre는 요청을 보내는 것에 대한 귀하의 인용문에 아무 것도 없습니다.

관찰 한대로 일부 입력 단계를 수행 할 때까지 요청이 버퍼링됩니다.

+0

. 나는 TCP 핸드 셰이크가 있다는 것을 알아 냈다. 실제로는 TCP 연결이 서버 측에서 타임 아웃 될 수 있기 때문에 불필요하다고 생각합니다. 어쨌든 고마워. – JAAAY