Java에서 URL에 대한 HTTP 응답 코드를 얻는 방법은 무엇입니까?


144

특정 URL의 응답 코드를 얻는 단계 또는 코드를 알려주십시오.



2
그가 응답 코드를 원하기 때문에 중복이라고 말하지는 않지만 @Ajit 당신은 어쨌든 그것을 확인해야합니다. 약간의 실험을 추가하면 좋습니다.
slezica 2016 년

2
다른 사람들이 당신을 위해 당신의 일을하도록 요구하기보다는. 최소한이 작업을 스스로 수행하려고 시도했음을 증명하십시오. 현재 코드와이 작업을 수행 한 방법을 보여줍니다. 어떤 사람이 당신을 위해 노력하지 않고 당신을 위해 일하기를 원한다면 누군가를 고용하고 지불 할 수 있습니다.
Patrick W. McMahon

그는 어떤 요구를 했습니까? 그는 무엇을 해야할지 몰랐을 때 바퀴를 돌리는 대신 도움을 요청했습니다. 그는 의도 한대로 커뮤니티를 사용하고있었습니다.
Danny Remington-OMS

답변:


180

HttpURLConnection :

URL url = new URL("http://example.com");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();

int code = connection.getResponseCode();

이것은 결코 강력한 예가 아닙니다. 를 처리해야합니다 IOException. 하지만 시작해야합니다.

더 많은 기능이 필요한 것이 있으면 HttpClient를 확인하십시오 .


2
내 구체적인 경우와 귀하의 방법으로, 나는 일반적으로 http 오류 407 인 IOException ( "프록시로 인증하지 못했습니다")을 얻습니다. 발생한 예외에 대한 정밀도 (http 오류 코드)를 얻을 수있는 방법이 있습니까 getRespondeCode () 메소드에 의해? 그건 그렇고, 나는 오류를 처리하는 방법을 알고 있으며 각 예외 (또는 적어도이 특정 예외)를 구별하는 방법을 알고 싶습니다. 감사.
grattmandu03

2
@ grattmandu03-확실하지 않습니다. 당신 같은 외모로 실행중인 stackoverflow.com/questions/18900143/... (불행히도 대답을하지 않는). HttpClient와 같은 고급 프레임 워크를 사용해보십시오. 이러한 응답을 처리하는 방법을 조금 더 제어 할 수 있습니다.
Rob Hruska

네 답변 감사합니다. 내 임무는이 프록시와 함께 작동하도록 이전 코드를 수정하는 것이며 클라이언트가 내 작업을 더 많이 이해할 수 있도록 수정이 적습니다. 그러나 나는 그것이 내가 원하는 것을 할 수있는 유일한 방법이라고 생각합니다. 어쨌든 고마워
grattmandu03

finally 블록에서 disconnect ()를 호출해야합니까?
앤드류 스완

그것은 아마 달려 있습니다. 나는 약간의 연구를 할 것입니다. 문서는 말을 호출 disconnect()지속 접속이 그 시점에서 유휴 상태 일 경우 기본 소켓을 닫을 수 방법. 보장되지 않습니다. 또한 문서 에 따르면 서버에 대한 다른 요청이 조만간있을 가능성이 적습니다. 호출 disconnect()은이 HttpURLConnection인스턴스가 다른 요청에 재사용 될 수 있음을 의미하지 않아야 합니다. 를 사용하여 InputStream데이터를 읽는 경우 close()해당 스트림을 finally블록으로 만들어야 합니다 .
Rob Hruska 5

38
URL url = new URL("http://www.google.com/humans.txt");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
int statusCode = http.getResponseCode();

11
더 간결한 (그러나 완전히 기능적인) 예를 보려면 +1입니다. 좋은 예제 URL도 ( background ) :)
Jonik

스레드 "메인"java.net.ConnectException에서 예외가 발생했습니다. 연결이 거부되었습니다 : 연결 왜 내가 이것을 받는지 모르겠습니다.
Ganesa Vijayakumar

그냥 주제에서, 연결이 생성 할 수있는 모든 응답 코드를 알고려고합니다. 문서가 있습니까?
Skynet

기본 인증으로 URL을 확인하는 방법
Satheesh Kumar


10

다음을 시도해 볼 수 있습니다.

class ResponseCodeCheck 
{

    public static void main (String args[]) throws Exception
    {

        URL url = new URL("http://google.com");
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();

        int code = connection.getResponseCode();
        System.out.println("Response code of the object is "+code);
        if (code==200)
        {
            System.out.println("OK");
        }
    }
}

스레드 "main"에서 예외가 발생 함 java.net.ConnectException : 연결이 거부되었습니다 : 연결. 나는 resone을 모른다
Ganesa Vijayakumar

5
import java.io.IOException;
import java.net.URL;
import java.net.HttpURLConnection;

public class API{
    public static void main(String args[]) throws IOException
    {
        URL url = new URL("http://www.google.com");
        HttpURLConnection http = (HttpURLConnection)url.openConnection();
        int statusCode = http.getResponseCode();
        System.out.println(statusCode);
    }
}

4

이것은 나를 위해 일했다 :

            import org.apache.http.client.HttpClient;
            import org.apache.http.client.methods.HttpGet;  
            import org.apache.http.impl.client.DefaultHttpClient;
            import org.apache.http.HttpResponse;
            import java.io.BufferedReader;
            import java.io.InputStreamReader;



            public static void main(String[] args) throws Exception {   
                        HttpClient client = new DefaultHttpClient();
                        //args[0] ="http://hostname:port/xyz/zbc";
                        HttpGet request1 = new HttpGet(args[0]);
                        HttpResponse response1 = client.execute(request1);
                        int code = response1.getStatusLine().getStatusCode();

                         try(BufferedReader br = new BufferedReader(new InputStreamReader((response1.getEntity().getContent())));){
                            // Read in all of the post results into a String.
                            String output = "";
                            Boolean keepGoing = true;
                            while (keepGoing) {
                                String currentLine = br.readLine();          
                                if (currentLine == null) {
                                    keepGoing = false;
                                } else {
                                    output += currentLine;
                                }
                            }
                            System.out.println("Response-->"+output);   
                         }

                         catch(Exception e){
                              System.out.println("Exception"+e);  

                          }


                   }

완전한. URL에 리디렉션이 있어도 작동
Daniel

2

이것이 나를 위해 일한 것입니다.

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class UrlHelpers {

    public static int getHTTPResponseStatusCode(String u) throws IOException {

        URL url = new URL(u);
        HttpURLConnection http = (HttpURLConnection)url.openConnection();
        return http.getResponseCode();
    }
}

희망이 누군가에게 도움이되기를 바랍니다 :)


2

400 오류 메시지를 확인하는이 코드 조각을 사용해보십시오

huc = (HttpURLConnection)(new URL(url).openConnection());

huc.setRequestMethod("HEAD");

huc.connect();

respCode = huc.getResponseCode();

if(respCode >= 400) {
    System.out.println(url+" is a broken link");
} else {
    System.out.println(url+" is a valid link");
}

1

스캐너로 데이터를 가져 오는 효율적인 방법 (고르지 않은 페이로드 포함)

public static String getResponseFromHttpUrl(URL url) throws IOException {
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        InputStream in = urlConnection.getInputStream();

        Scanner scanner = new Scanner(in);
        scanner.useDelimiter("\\A");  // Put entire content to next token string, Converts utf8 to 16, Handles buffering for different width packets

        boolean hasInput = scanner.hasNext();
        if (hasInput) {
            return scanner.next();
        } else {
            return null;
        }
    } finally {
        urlConnection.disconnect();
    }
}

이것은 질문에 전혀 대답하지 않습니다.
pringi

1

IOException이 발생할 때 대기 시간 및 오류 코드를 설정하도록 조정할 수있는 전체 정적 메소드입니다.

  public static int getResponseCode(String address) {
    return getResponseCode(address, 404);
  }

  public static int getResponseCode(String address, int defaultValue) {
    try {
      //Logger.getLogger(WebOperations.class.getName()).info("Fetching response code at " + address);
      URL url = new URL(address);
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.setConnectTimeout(1000 * 5); //wait 5 seconds the most
      connection.setReadTimeout(1000 * 5);
      connection.setRequestProperty("User-Agent", "Your Robot Name");
      int responseCode = connection.getResponseCode();
      connection.disconnect();
      return responseCode;
    } catch (IOException ex) {
      Logger.getLogger(WebOperations.class.getName()).log(Level.INFO, "Exception at {0} {1}", new Object[]{address, ex.toString()});
      return defaultValue;
    }
  }

0
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");

. . . . . . .

System.out.println("Value" + connection.getResponseCode());
             System.out.println(connection.getResponseMessage());
             System.out.println("content"+connection.getContent());

기본 인증을 사용하는 URL에 대해 어떻게해야합니까?
Satheesh Kumar

0

java http / https URL 연결을 사용하여 웹 사이트 및 기타 정보에서 응답 코드를 얻을 수 있으며 여기에는 샘플 코드가 있습니다.

 try {

            url = new URL("https://www.google.com"); // create url object for the given string  
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            if(https_url.startsWith("https")){
                 connection = (HttpsURLConnection) url.openConnection();
            }

            ((HttpURLConnection) connection).setRequestMethod("HEAD");
            connection.setConnectTimeout(50000); //set the timeout
            connection.connect(); //connect
            String responseMessage = connection.getResponseMessage(); //here you get the response message
             responseCode = connection.getResponseCode(); //this is http response code
            System.out.println(obj.getUrl()+" is up. Response Code : " + responseMessage);
            connection.disconnect();`
}catch(Exception e){
e.printStackTrace();
}

0

오래된 질문이지만 REST 방식으로 표시 할 수 있습니다 (JAX-RS).

import java.util.Arrays;
import javax.ws.rs.*

(...)

Response response = client
    .target( url )
    .request()
    .get();

// Looking if response is "200", "201" or "202", for example:
if( Arrays.asList( Status.OK, Status.CREATED, Status.ACCEPTED ).contains( response.getStatusInfo() ) ) {
    // lets something...
}

(...)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.