2011-11-30 2 views
0

전문가일반 소켓 연결을 사용하여 HTTP 요청을 보내고 헤더없이 응답을받을 수 있습니까?

내가 HTTP 프로토콜을 처리하는 다운로더를 구현하기 위해 노력하고, 나는 다음과 같은 코드를 사용하여 HTTP 요청을 보낼 수 있어요 : 응답을 수신에

StringBuilder request = new StringBuffer().append("GET ").append(uri.getPath()); 
if(uri.getQuery() != null) 
    request.append('?').append(uri.getQuery()); 
request.append(" HTTP/1.1\nHost: ").append(uri.getHost()).append("\nAccept: */*\n\n"); 

// send the request 
outputStream.write(request.toString().getBytes("utf-8")); 
outputStream.flush(); 

을, 나는 몸을 저장해야합니다 디스크에 대한 응답이 표시되고 작업이 완료됩니다.

내 질문은 : 서버가 HTTP 헤더 (본문 만)없이 응답을 보내도록 요청할 수있는 HTTP 헤더가 있습니까?

내가이 질문을하는 이유는 HTTP 헤더를 건너 뛰지 않아도됩니다. 응답을 읽을 때 입력 스트림에서 원시 바이트를 직접 읽을 수 있습니다. 내가 원하는 것은 응답의 본문입니다. HTTP 헤더는이 경우별로 중요하지 않습니다.

+1

아니요 !!!!!!!!!!!!!! – undone

+1

헤더가 필요합니다. 요청이 성공적으로 처리되었는지 보여줍니다. –

+1

응답 본문을 읽는 방법은 말할 것도없고 HTTP 1.1 요청을 전송하기 때문에 여러 가지 방법 중 하나로 전송 될 수 있습니다. –

답변

1

아니요, 항상 헤더를 다시 가져올 수 있습니다. 그리고 검색하려는 리소스가 다른 인코딩 및/또는 여러 부분으로 올 수 있으므로 구문 분석해야합니다.

반면에 이것은 wget(1)과 같은 도구를 통해 이미 수행되었습니다. 프로그래밍 언어를 사용하거나 소스를 조사하여 프로그래밍 방식으로 수행해야 할 작업을 파악할 수 있습니다.

+0

모든 신속한 답장을 보내 주셔서 감사합니다. 직접 해석하려고합니다 ~ – neevek

+0

어려운 작업입니다. 내 자바는 매우 녹슬지 만'java.net.URL' 같은 것을 대신 사용할 수 없습니까? –

+0

네, java.net.HttpURLConnection을 사용하여 파일을 다운로드 할 수있었습니다. 하지만 평범한 소켓이 나에게 더 나은 성능을 줄 것이라고 생각한다.^_ ^ – neevek

1

서버를 제어하지 않으면 아마도 그렇지 않습니다. 그렇게하면 서버 측을 사용하는 것에 따라 헤더없이 응답을 보낼 수 있습니다.

Java를 사용하고있는 것처럼 보이고 직접 구문 분석하지 않고 응답을 추출하는 데 도움이되는 라이브러리가있는 것 같습니다. 머리글없이 응답을 해킹하려고 시도하는 것보다 낫습니다.

1

HTTP 프로토콜이 작동 중입니다. 당신은 항상 헤더를받습니다. 저는 Java가 http 클라이언트를 어딘가에서 사용할 준비가되어 있다고 확신합니다. 나는 당신이 그것을 사용하는 것이 좋습니다.

관련 문제