Làm cách nào để lấy mã phản hồi HTTP cho một URL trong Java?


144

Vui lòng cho tôi biết các bước hoặc mã để nhận mã phản hồi của URL dạng hạt.



2
Tôi sẽ không nói trùng lặp, vì anh ấy muốn mã phản hồi, nhưng @Ajit bạn vẫn nên kiểm tra xem sao. Thêm một thử nghiệm nhỏ và bạn tốt để đi.
slezica

2
Thay vì đưa ra yêu cầu cho người khác làm công việc của bạn cho bạn. Vui lòng chứng minh rằng bạn ít nhất đã cố gắng tự mình hoàn thành nhiệm vụ này. Hiển thị mã hiện tại của bạn và cách bạn đã cố gắng hoàn thành nhiệm vụ này. Nếu bạn muốn ai đó làm việc cho bạn mà không cần nỗ lực từ phía bạn, bạn có thể thuê ai đó và trả tiền cho họ.
Patrick W. McMahon

Anh ấy đã đòi hỏi gì? Anh ta yêu cầu giúp đỡ, thay vì quay bánh xe khi anh ta không biết phải làm gì. Ông đã sử dụng cộng đồng như dự định.
Daniel Remington - OMS

Câu trả lời:


180

Kết nối httpURLC :

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

int code = connection.getResponseCode();

Đây không phải là một ví dụ mạnh mẽ; bạn sẽ cần phải xử lý IOExceptions và whatnot. Nhưng nó sẽ giúp bạn bắt đầu.

Nếu bạn cần một cái gì đó có nhiều khả năng hơn, hãy kiểm tra HttpClient .


2
Trong trường hợp cụ thể của tôi và với phương pháp của bạn, tôi nhận được IOException ("Không thể xác thực bằng proxy") thường là lỗi http 407. Có cách nào để tôi có thể nhận được độ chính xác (mã lỗi http) về ngoại lệ được nêu ra không bằng phương thức getRonymouseCode ()? Nhân tiện, tôi biết cách xử lý lỗi của mình và tôi chỉ muốn biết cách phân biệt từng ngoại lệ (hoặc ít nhất là ngoại lệ cụ thể này). Cảm ơn.
grattlahoma03

2
@ grattlahoma03 - Tôi không chắc chắn. Có vẻ như bạn đang chạy vào stackoverflow.com/questions/18900143/, (điều không may là không có câu trả lời). Bạn có thể thử sử dụng một khung công tác cấp cao hơn như HttpClient, có thể sẽ cung cấp cho bạn quyền kiểm soát nhiều hơn một chút về cách bạn xử lý các phản hồi như vậy.
Rob Hruska

Ok cảm ơn bạn đã trả lời. Công việc của tôi là điều chỉnh một mã cũ để làm việc với proxy này và ít sửa đổi hơn, khách hàng sẽ hiểu công việc của tôi. Nhưng tôi đoán, đó là cho tôi (ngay bây giờ) cách duy nhất để làm những gì tôi muốn. Dẫu sao cũng xin cảm ơn.
grattlahoma03

Bạn có cần gọi ngắt kết nối () trong một khối cuối cùng không?
Andrew Swan

Nó có thể phụ thuộc, tôi sẽ làm một số nghiên cứu. Các tài liệu nói rằng Gọi disconnect()phương thức có thể đóng ổ cắm bên dưới nếu kết nối liên tục không hoạt động tại thời điểm đó. , mà không đảm bảo. Docs cũng nói Chỉ ra rằng các yêu cầu khác đến máy chủ là không thể trong tương lai gần. Gọi disconnect()không nên ngụ ý rằng HttpURLConnectiontrường hợp này có thể được sử dụng lại cho các yêu cầu khác. Nếu bạn đang sử dụng InputStreamdữ liệu để đọc dữ liệu, bạn nên close()truyền phát theo finallykhối.
Rob Hruska

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

11
+1 cho ví dụ ngắn gọn hơn (nhưng đầy đủ chức năng). URL ví dụ đẹp quá ( nền ) :)
Jonik

nhận ngoại lệ trong luồng "chính" java.net.ConnectException: Kết nối bị từ chối: kết nối Tôi không biết tại sao tôi lại nhận được điều này.
Ganesa Vijayakumar

Chỉ cần lạc đề, tôi đang cố gắng để biết tất cả các mã phản hồi mà một kết nối có thể tạo ra - có tài liệu không?
Skynet

Cách kiểm tra các url này với xác thực cơ bản
Seditesh Kumar

cộng với một để đề xuất URL google.com/humans.txt
PC.

10

Bạn có thể thử như sau:

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");
        }
    }
}

nhận Ngoại lệ trong luồng "chính" java.net.ConnectException: Kết nối bị từ chối: kết nối. Tôi không biết bản 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

Điều này đã làm việc cho tôi:

            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);  

                          }


                   }

Hoàn hảo. Hoạt động ngay cả khi có chuyển hướng trong URL
Daniel

2

Đây là những gì làm việc cho tôi:

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();
    }
}

Hy vọng điều này sẽ giúp được ai đó :)


2

Hãy thử đoạn mã này đang kiểm tra 400 thông báo lỗi

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

Cách hiệu quả để lấy dữ liệu (Với tải trọng không đồng đều) bằng máy quét.

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();
    }
}

Điều này không trả lời câu hỏi nào cả.
pringi

1

Đây là phương thức tĩnh đầy đủ, bạn có thể điều chỉnh để đặt thời gian chờ và mã lỗi khi IOException xảy ra:

  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());

Làm cách nào chúng tôi có thể làm cho các URL với quyền xác thực cơ bản?
Seditesh Kumar

0

bạn có thể sử dụng kết nối url java http / https để nhận mã phản hồi từ trang web và các thông tin khác cũng ở đây là mã mẫu.

 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

Đây là một câu hỏi cũ, nhưng cho phép hiển thị theo cách 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...
}

(...)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.