문제

간단한 HTTP 요청을 보내기 위해이 코드를 사용하고 있습니다.

try
{
    Socket  s = new Socket ();
    s.bind    (new InetSocketAddress (ipFrom, 0));
    s.connect (new InetSocketAddress (ipTo,   80), 1000);

    PrintWriter     writer = new PrintWriter    (s.getOutputStream ());
    BufferedReader  reader = new BufferedReader (new InputStreamReader (s.getInputStream ()));

    writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 
    writer.flush ();

    s     .close ();
    reader.close ();
    writer.close ();
}

그러나 보시다시피, 나는 사용자 정의 헤더를 보내지 않습니다. 사용자 정의 헤더를 보내려면 무엇을 추가해야합니까?

건배,

크리스토프 올리비에

도움이 되었습니까?

해결책

당신이 쓸 때

writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 

그만큼 \r\n\r\n 비트는 선을 끝내기 위해 라인 피드/캐리지 성장을 보내고 다른 하나는 더 이상 헤더가 없음을 나타냅니다. 이것은 HTTP와 이메일 형식의 표준입니다. 즉, 빈 줄은 헤더의 끝을 나타냅니다. 추가 헤더를 추가하려면 완료 될 때까지 해당 시퀀스를 보내지 않아도됩니다. 대신 다음을 수행 할 수 있습니다

writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
writer.print ("header1: value1\r\n"); 
writer.print ("header2: value2\r\n"); 
writer.print ("header3: value3\r\n"); 
// end the header section
writer.print ("\r\n"); 

다른 팁

HTTP 프로토콜을 직접 구현하려고 시도하지 마십시오.

사용 httpcomponents Apache에 의해.

(또는 더 오래되고 사용하기가 더 쉽고 버전 - httpclient)

HTTP를 직접 구현하는 대신 Bozho가 언급 한 httpcomponents를 시도해 보더라도 사용자 정의 헤더를 추가하는 방법입니다.

 writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
 writer.print ("X-MyOwnHeader: SomeValue\r\n");

HTTP 연결에 사용되도록 이미 준비된 클래스를 사용해야합니다. HTTPUrlConnection 그것은 어린이입니다 UrlConnection 이 방법이 있습니다

void setRequestProperty(String key, String value)

요청의 매개 변수를 설정하는 데 사용해야합니다 ( 헤더 필드) .. 점검 여기 참조

당신이 절대적으로 직접해야한다면, 그것은 자체 라인의 각 헤더와 함께이 형식을 따라야합니다.

이름 : 가치

HTTP 사양의 헤더 형식을 살펴보십시오.

http://www.w3.org/protocols/http/1.0/draft-ietf-http-spec.html#message-headers

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top