Android URL验证工作正常,但保持连接并限制任何进一步的请求 公共类UrlVarificationTask扩展了AsyncTask{ 私有字符串url; 私人代表; 私有HttpURLConnection huc; 公共UrlVarificationTask(字符串url、UrlVarificationDelegate委托){ this.url=url; this.delegate=委托; } @凌驾 受保护的void onPreExecute(){ super.onPreExecute(); } @凌驾 受保护的整数doInBackground(Void…params){ int-responseCode=0; 试一试{ set属性(“http.keepAlive”、“false”); URL u=新的URL(URL); huc=(HttpURLConnection)u.openConnection(); huc.setRequestMethod(“HEAD”); huc.connect(); responseCode=huc.getResponseCode(); }捕捉(畸形或异常){ 响应代码=-555; }捕获(io异常){ 响应代码=-444; }捕获(例外情况除外){ 响应代码=-333; 例如printStackTrace(); } 如果(huc!=null){ 试一试{ huc.getInputStream().close(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } huc.disconnect(); } 调试(“响应代码==”+响应代码); 返回响应代码; } @凌驾 受保护的void onPostExecute(整数响应代码){ 代表urlVarificationResponseCode(responseCode); super.onPostExecute(responseCode); } }

Android URL验证工作正常,但保持连接并限制任何进一步的请求 公共类UrlVarificationTask扩展了AsyncTask{ 私有字符串url; 私人代表; 私有HttpURLConnection huc; 公共UrlVarificationTask(字符串url、UrlVarificationDelegate委托){ this.url=url; this.delegate=委托; } @凌驾 受保护的void onPreExecute(){ super.onPreExecute(); } @凌驾 受保护的整数doInBackground(Void…params){ int-responseCode=0; 试一试{ set属性(“http.keepAlive”、“false”); URL u=新的URL(URL); huc=(HttpURLConnection)u.openConnection(); huc.setRequestMethod(“HEAD”); huc.connect(); responseCode=huc.getResponseCode(); }捕捉(畸形或异常){ 响应代码=-555; }捕获(io异常){ 响应代码=-444; }捕获(例外情况除外){ 响应代码=-333; 例如printStackTrace(); } 如果(huc!=null){ 试一试{ huc.getInputStream().close(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } huc.disconnect(); } 调试(“响应代码==”+响应代码); 返回响应代码; } @凌驾 受保护的void onPostExecute(整数响应代码){ 代表urlVarificationResponseCode(responseCode); super.onPostExecute(responseCode); } },android,http,http-headers,url-validation,Android,Http,Http Headers,Url Validation,我用上面的dode来验证url 如果HEAD给我回复代码200,那么只有我打开一个指向webview的url 但一旦我调用它,它就会保持连接,即使关闭后也不允许任何其他http请求,该怎么办 这是作为HttpURLConnection保持连接活动而工作的,因此我们无法提出进一步的请求,因此保持活动设置为false可解决此问题。要正确关闭HttpURLConnection,请转到 此URL已关闭 public class UrlVarificationTask extends AsyncTask

我用上面的dode来验证url

如果HEAD给我回复代码200,那么只有我打开一个指向webview的url

但一旦我调用它,它就会保持连接,即使关闭后也不允许任何其他http请求,该怎么办


这是作为HttpURLConnection保持连接活动而工作的,因此我们无法提出进一步的请求,因此保持活动设置为false可解决此问题。

要正确关闭HttpURLConnection,请转到

此URL已关闭

public class UrlVarificationTask extends AsyncTask<Void, Void, Integer> {

    private String url;
    private UrlVarificationDelegate delegate;
    private HttpURLConnection huc;

    public UrlVarificationTask(String url, UrlVarificationDelegate delegate) {
        this.url = url;
        this.delegate = delegate;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected Integer doInBackground(Void... params) {
        int responseCode = 0;
        try {
            System.setProperty("http.keepAlive", "false");
            URL u = new URL(url);
            huc = (HttpURLConnection) u.openConnection();
            huc.setRequestMethod("HEAD");
            huc.connect();
            responseCode = huc.getResponseCode();

        } catch (MalformedURLException mal) {
            responseCode = -555;
        } catch (IOException io) {
            responseCode = -444;
        } catch (Exception ex) {
            responseCode = -333;
            ex.printStackTrace();
        }

        if (huc != null) {
            try {
                huc.getInputStream().close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            huc.disconnect();
        }

        Logger.debug("Response Code==" + responseCode);
        return responseCode;
    }

    @Override
    protected void onPostExecute(Integer responseCode) {
        delegate.urlVarificationResponseCode(responseCode);
        super.onPostExecute(responseCode);
    }

}
huc.setRequestProperty("keep-alive", "false");