Check if URL exists or not on Server

后端 未结 5 898
失恋的感觉
失恋的感觉 2020-12-18 00:48

This is my code which I am using to verify, URL exists or not on Server, but always getting not exist however link is alive

Where I am doing mistake in my code, why

相关标签:
5条回答
  • 2020-12-18 01:20

    I use this code to verify url alive. I have tested this code with image url

    Example:

    url = "https://ima.vn/wp-content/uploads/2017/11/ima-sofa-titan-trungkinh-1-of-3.jpg"
    message = "Image url";
    
    public void assertUrlalive(String url, String message) {
        try {
            URL myUrl = new URL(url);
            HttpURLConnection huc = (HttpURLConnection) myUrl.openConnection();
            assertEquals(huc.getResponseCode(), 200, message);
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("Connection Err: " + e.getMessage());
        }
    }
    
    0 讨论(0)
  • 2020-12-18 01:23

    Use if(bResponse) instead of if(bResponse==true)

    0 讨论(0)
  • 2020-12-18 01:26

    Change your exists() to this

    public boolean exists(String url){
        HttpURLConnection huc =  ( HttpURLConnection )  url.openConnection (); 
        huc.setRequestMethod ("GET");  //OR  huc.setRequestMethod ("HEAD"); 
        huc.connect () ; 
        int code = huc.getResponseCode() ;
        System.out.println(code);
    
         if(code==200)
           return true;
         else
        return false;
       }
    
    0 讨论(0)
  • 2020-12-18 01:34

    You will get Network On Main Thread Exception

    Look at NetworkOnMainThreadException

    so your method always returns false because of:

       catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    

    quick fix:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);     
    
            String customURL = "http://www.desicomments.com/dc3/08/273858/273858.jpg";
    
            MyTask task = new MyTask();
            task.execute(customURL);
        }
    
    
        private class MyTask extends AsyncTask<String, Void, Boolean> {
    
            @Override
            protected void onPreExecute() {
    
            }
    
            @Override
            protected Boolean doInBackground(String... params) {
    
                 try {
                        HttpURLConnection.setFollowRedirects(false);
                        HttpURLConnection con =  (HttpURLConnection) new URL(params[0]).openConnection();
                        con.setRequestMethod("HEAD");
                        System.out.println(con.getResponseCode()); 
                        return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
                    }
                    catch (Exception e) {   
                        e.printStackTrace();    
                        return false;
                    }
            }
    
            @Override
            protected void onPostExecute(Boolean result) {
                boolean bResponse = result;
                 if (bResponse==true)
                    {
                        Toast.makeText(MainActivity.this, "File exists!", Toast.LENGTH_SHORT).show();      
                    }
                    else
                    {           
                        Toast.makeText(MainActivity.this, "File does not exist!", Toast.LENGTH_SHORT).show();
                    }                  
            }           
        }
    }
    

    With a ScheduledThreadPoolExecutor:

    but remember to shut down it!!

    public class MainActivity extends Activity {
         String customURL;
         String msg = "";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);     
    
            customURL = "http://www.desicomments.com/dc3/08/273858/273858.jpg";
    
            final ScheduledThreadPoolExecutor myTimer = new ScheduledThreadPoolExecutor(1);
            myTimer.scheduleAtFixedRate(new Runnable() {
    
                @Override
                public void run() {
    
                    try {
                        HttpURLConnection.setFollowRedirects(false);
                        HttpURLConnection con =  (HttpURLConnection) new URL(customURL).openConnection();
                        con.setRequestMethod("HEAD");
                        System.out.println(con.getResponseCode()); 
    
                        if(con.getResponseCode() == HttpURLConnection.HTTP_OK){
    
                            msg = "File exist!";
    
                        }else{
    
                            msg = "File does not exist!";
    
                        }
    
                        runOnUiThread(new Runnable() {
    
                                @Override
                                public void run() {
    
                                    Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();      
                                }
                            });
                    }
                    catch (Exception e) {   
                        e.printStackTrace();    
                        return;
                    }
    
                }
            }, 0,10000, TimeUnit.MILLISECONDS);
        }
    
    0 讨论(0)
  • 2020-12-18 01:45

    you can use the follow code to try.

        final String customURL = "http://www.desicomments.com/dc3/08/273858/273858.jpg";
                new Thread(){
    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        super.run();
                        try {
                            URL url = new URL(customURL);
                            HttpURLConnection con = (HttpURLConnection) url.openConnection();
                            con.setRequestMethod("HEAD");
                            con.connect();
                            Log.i(TAG, "con.getResponseCode() IS : " + con.getResponseCode());
                            if(con.getResponseCode() == HttpURLConnection.HTTP_OK){
                                Log.i(TAG, "Sucess");
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            Log.i(TAG, "fail");
                        }
                    }
    
                }.start();
    
    Reason: After android 2.3, you can't perform a networking operation on its main thread, 
    

    if you do so, there will be can exception and you can't get the right result. So if you want the application to perform a networking operation, you can use another Thread to do it.

    0 讨论(0)
提交回复
热议问题