Java Tutorial/Network/URLConnection

Материал из Java эксперт
Перейти к: навигация, поиск

All Headers

import java.net.URL;
import java.net.URLConnection;
public class MainClass {
  public static void main(String args[]) throws Exception {
    URL u = new URL("http://www.jexp.ru");
    URLConnection uc = u.openConnection();
    for (int j = 1;; j++) {
      String header = uc.getHeaderField(j);
      if (header == null)
        break;
      System.out.println(uc.getHeaderFieldKey(j) + ": " + header);
    }
  }
}





Call a servlet from a Java command line application

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
public class CounterApp {
  String servletURL;
  String sessionCookie = null;
  public static void main(String args[]) {
    if (args.length == 0) {
      System.out.println("\nServlet URL must be specified");
      return;
    }
    try {
      CounterApp app = new CounterApp(args[0]);
      for (int i = 1; i <= 5; i++) {
        int count = app.getCount();
        System.out.println("Pass " + i + " count=" + count);
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  public CounterApp(String url) {
    servletURL = url;
  }
  public int getCount() throws Exception {
    java.net.URL url = new java.net.URL(servletURL);
    java.net.URLConnection con = url.openConnection();
    if (sessionCookie != null) {
      con.setRequestProperty("cookie", sessionCookie);
    }
    con.setUseCaches(false);
    con.setDoOutput(true);
    con.setDoInput(true);
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    DataOutputStream out = new DataOutputStream(byteOut);
    out.flush();
    byte buf[] = byteOut.toByteArray();
    con.setRequestProperty("Content-type", "application/octet-stream");
    con.setRequestProperty("Content-length", "" + buf.length);
    DataOutputStream dataOut = new DataOutputStream(con.getOutputStream());
    dataOut.write(buf);
    dataOut.flush();
    dataOut.close();
    DataInputStream in = new DataInputStream(con.getInputStream());
    int count = in.readInt();
    in.close();
    if (sessionCookie == null) {
      String cookie = con.getHeaderField("set-cookie");
      if (cookie != null) {
        sessionCookie = parseCookie(cookie);
        System.out.println("Setting session ID=" + sessionCookie);
      }
    }
    return count;
  }
  public String parseCookie(String raw) {
    String c = raw;
    if (raw != null) {
      int endIndex = raw.indexOf(";");
      if (endIndex >= 0) {
        c = raw.substring(0, endIndex);
      }
    }
    return c;
  }
}





Chain the InputStream to a Reader

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
public class MainClass {
  public static void main(String[] args) throws Exception {
    URL u = new URL("http://www.jexp.ru");
    URLConnection uc = u.openConnection();
    InputStream raw = uc.getInputStream();
    InputStream buffer = new BufferedInputStream(raw);
    // chain the InputStream to a Reader
    Reader r = new InputStreamReader(buffer);
    int c;
    while ((c = r.read()) != -1) {
      System.out.print((char) c);
    }
  }
}





Downloading a web page using URL and URLConnection classes

import java.io.BufferedInputStream;
import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] args) throws Exception {
    URLConnection urlc = new URL("http://www.google.ru").openConnection();
    BufferedInputStream buffer = new BufferedInputStream(urlc.getInputStream());
    
    int byteRead;
    while ((byteRead = buffer.read()) != -1){
      System.out.println((char) byteRead);
    }
    buffer.close();
  }
}





Encoding Aware Source Viewer

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
public class MainClass {
  public static void main(String[] args) throws Exception {
    String encoding = "ISO-8859-1";
    URL u = new URL("http://www.jexp.ru");
    URLConnection uc = u.openConnection();
    String contentType = uc.getContentType();
    int encodingStart = contentType.indexOf("charset=");
    if (encodingStart != -1) {
      encoding = contentType.substring(encodingStart + 8);
    }
    InputStream in = new BufferedInputStream(uc.getInputStream());
    Reader r = new InputStreamReader(in, encoding);
    int c;
    while ((c = r.read()) != -1) {
      System.out.print((char) c);
    }
  }
}





Get files updated last 24 hours

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
public class MainClass {
  public static void main(String[] args) throws Exception {
    Date today = new Date();
    long millisecondsPerDay = 24 * 60 * 60 * 1000;
    URL u = new URL("http://www.jexp.ru");
    URLConnection uc = u.openConnection();
    uc.setIfModifiedSince((new Date(today.getTime() - millisecondsPerDay)).getTime());
    InputStream in = new BufferedInputStream(uc.getInputStream());
    Reader r = new InputStreamReader(in);
    int c;
    while ((c = r.read()) != -1) {
      System.out.print((char) c);
    }
  }
}





Get response header from HTTP request

import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Main {
  public static void main(String[] args) throws Exception {
    URL url = new URL("http://www.google.ru/index.html");
    URLConnection connection = url.openConnection();
    Map responseMap = connection.getHeaderFields();
    for (Iterator iterator = responseMap.keySet().iterator(); iterator.hasNext();) {
      String key = (String) iterator.next();
      System.out.println(key + " = ");
      List values = (List) responseMap.get(key);
      for (int i = 0; i < values.size(); i++) {
        Object o = values.get(i);
        System.out.println(o + ", ");
      }
    }
  }
}





Getting the Cookies from an HTTP Connection

import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] argv) throws Exception {
    URL url = new URL("http://hostname:80");
    URLConnection conn = url.openConnection();
    for (int i = 0;; i++) {
      String headerName = conn.getHeaderFieldKey(i);
      String headerValue = conn.getHeaderField(i);
      if (headerName == null && headerValue == null) {
        break;
      }
      if ("Set-Cookie".equalsIgnoreCase(headerName)) {
        String[] fields = headerValue.split(";\\s*");
        for (int j = 1; j < fields.length; j++) {
          if ("secure".equalsIgnoreCase(fields[j])) {
            System.out.println("secure=true");
          } else if (fields[j].indexOf("=") > 0) {
            String[] f = fields[j].split("=");
            if ("expires".equalsIgnoreCase(f[0])) {
              System.out.println("expires"+ f[1]);
            } else if ("domain".equalsIgnoreCase(f[0])) {
              System.out.println("domain"+ f[1]);
            } else if ("path".equalsIgnoreCase(f[0])) {
              System.out.println("path"+ f[1]);
            }
          }
        }
      }
    }
  }
}





Getting the Response Headers from an HTTP Connection

import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] argv) throws Exception {
    URL url = new URL("http://hostname:80");
    URLConnection conn = url.openConnection();
    for (int i = 0;; i++) {
      String headerName = conn.getHeaderFieldKey(i);
      String headerValue = conn.getHeaderField(i);
      System.out.println(headerName);
      System.out.println(headerValue);
      if (headerName == null && headerValue == null) {
        System.out.println("No more headers");
        break;
      }
    }
  }
}





Header Viewer

import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
public class MainClass {
  public static void main(String args[]) throws Exception {
    URL u = new URL("http://www.jexp.ru");
    URLConnection uc = u.openConnection();
    System.out.println("Content-type: " + uc.getContentType());
    System.out.println("Content-encoding: " + uc.getContentEncoding());
    System.out.println("Date: " + new Date(uc.getDate()));
    System.out.println("Last modified: " + new Date(uc.getLastModified()));
    System.out.println("Expiration date: " + new Date(uc.getExpiration()));
    System.out.println("Content-length: " + uc.getContentLength());
  }
}



Content-type: text/html
Content-encoding: null
Date: Thu May 24 18:41:00 PDT 2007
Last modified: Fri May 18 08:20:08 PDT 2007
Expiration date: Wed Dec 31 16:00:00 PST 1969
Content-length: 345648


Identify yourself using HTTP Authentification

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] argv) throws Exception {
    
    URLConnection conn = new URL("http://www.yourserver.ru").openConnection();
    conn.setDoInput(true);
    conn.setRequestProperty("Authorization", "asdfasdf");
    conn.connect();
    InputStream in = conn.getInputStream();
  }
}





java.net.URLConnection

  1. A URLConnection object represents a connection to a remote machine.
  2. You use it to read a resource from and write to a remote machine.
  3. To obtain an instance of URLConnection, call the openConnection method on a URL object.
  4. To use a URLConnection object to write: set the value of doOutput to true using setDoOutput methods:



URL url = new URL ("http://www.google.ru/");
InputStream inputStream = url.openStream ();





Preventing Automatic Redirects in a HTTP Connection

import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] argv) throws Exception {
    HttpURLConnection.setFollowRedirects(false);
    URL url = new URL("http://hostname:80");
    URLConnection conn = url.openConnection();
    HttpURLConnection httpConn = (HttpURLConnection) conn;
    httpConn.setInstanceFollowRedirects(false);
    conn.connect();
  }
}





Read a GIF or CLASS from an URL and save it locally

import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String args[]) throws Exception {
    byte[] b = new byte[1];
    URL url = new URL("http://www.server.ru/a.gif");
    URLConnection urlConnection = url.openConnection();
    urlConnection.connect();
    DataInputStream di = new DataInputStream(urlConnection.getInputStream());
    FileOutputStream fo = new FileOutputStream("a.gif");
    while (-1 != di.read(b, 0, 1))
      fo.write(b, 0, 1);
    di.close();
    fo.close();
  }
}





Read from a URL with buffered stream

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class MainClass {
  public static void main(String[] args) throws Exception {
    URL u = new URL(args[0]);
    URLConnection uc = u.openConnection();
    BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
    String s = br.readLine();
    while (s != null) {
      System.out.println(s);
      s = br.readLine();
    }
  }
}





Sending a Cookie to an HTTP Server

import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] argv) throws Exception {
    URL url = new URL("http://hostname:80");
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Cookie", "name1=value1; name2=value2");
    conn.connect();
  }
}





Sending a POST Request Using a URL

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class Main {
  public static void main(String[] argv) throws Exception {
    String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
    data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    URL url = new URL("http://server.ru:80/cgi");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.flush();
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
      System.out.println(line);
    }
    wr.close();
    rd.close();
  }
}





Sending a POST Request with Parameters From a Java Class

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
public class Main {
  public static void main(String[] args) throws Exception {
    URL url = new URL("http://www.jexp.ru");
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);
    OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
    writer.write("value=1&anotherValue=1");
    writer.flush();
    String line;
    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while ((line = reader.readLine()) != null) {
      System.out.println(line);
    }
    writer.close();
    reader.close();
  }
}





URLConnection.openStream is more powerful than URL.openStream

Reading a Web resource"s headers and content:



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class MainClass {
  public static void main(String[] args) {
    try {
      URL url = new URL("http://www.jexp.ru/");
      URLConnection urlConnection = url.openConnection();
      Map<String, List<String>> headers = urlConnection.getHeaderFields();
      Set<Map.Entry<String, List<String>>> entrySet = headers.entrySet();
      for (Map.Entry<String, List<String>> entry : entrySet) {
        String headerName = entry.getKey();
        System.out.println("Header Name:" + headerName);
        List<String> headerValues = entry.getValue();
        for (String value : headerValues) {
          System.out.print("Header value:" + value);
        }
        System.out.println();
        System.out.println();
      }
      InputStream inputStream = urlConnection.getInputStream();
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
      String line = bufferedReader.readLine();
      while (line != null) {
        System.out.println(line);
        line = bufferedReader.readLine();
      }
      bufferedReader.close();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}



Header Name:Content-Length
Header value:329495
Header Name:X-Powered-By
Header value:ASP.NET
Header Name:ETag
Header value:"30d67746a17c71:11e5"
Header Name:null
Header value:HTTP/1.1 200 OK
Header Name:Date
Header value:Fri, 26 Jan 2007 17:02:42 GMT
Header Name:Accept-Ranges
Header value:bytes
Header Name:Content-Type
Header value:text/html
Header Name:Server
Header value:Microsoft-IIS/6.0
Header Name:Last-Modified
Header value:Mon, 04 Dec 2006 06:04:11 GMT
Header Name:Content-Location
Header value:http://www.jexp.ru/index.htm


Writing to a Web server

You can use a URLConnection object to send an HTTP request.



import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
public class MainClass {
  public static void main(String[] a)throws Exception {
    URL url = new URL("http://www.yourdomain.ru/form.jsp");
    URLConnection connection = url.openConnection();
    connection.setDoOutput(true);
    PrintWriter out = new PrintWriter(connection.getOutputStream());
    out.println("firstName=Joe");
    out.println("lastName=Average");
    out.close();
  }
}