Java Tutorial/Network/URLConnection
Содержание
- 1 All Headers
- 2 Call a servlet from a Java command line application
- 3 Chain the InputStream to a Reader
- 4 Downloading a web page using URL and URLConnection classes
- 5 Encoding Aware Source Viewer
- 6 Get files updated last 24 hours
- 7 Get response header from HTTP request
- 8 Getting the Cookies from an HTTP Connection
- 9 Getting the Response Headers from an HTTP Connection
- 10 Header Viewer
- 11 Identify yourself using HTTP Authentification
- 12 java.net.URLConnection
- 13 Preventing Automatic Redirects in a HTTP Connection
- 14 Read a GIF or CLASS from an URL and save it locally
- 15 Read from a URL with buffered stream
- 16 Sending a Cookie to an HTTP Server
- 17 Sending a POST Request Using a URL
- 18 Sending a POST Request with Parameters From a Java Class
- 19 URLConnection.openStream is more powerful than URL.openStream
- 20 Writing to a Web server
All Headers
<source lang="java">
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); } }
}</source>
Call a servlet from a Java command line application
<source lang="java">
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; }
}</source>
Chain the InputStream to a Reader
<source lang="java">
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); } }
}</source>
Downloading a web page using URL and URLConnection classes
<source lang="java">
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(); }
}</source>
Encoding Aware Source Viewer
<source lang="java">
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); } }
}</source>
Get files updated last 24 hours
<source lang="java">
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); } }
}</source>
Get response header from HTTP request
<source lang="java">
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 + ", "); } } }
}</source>
Getting the Cookies from an HTTP Connection
<source lang="java">
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]); } } } } } }
}</source>
Getting the Response Headers from an HTTP Connection
<source lang="java">
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; } } }
}</source>
Header Viewer
<source lang="java">
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()); }
}</source>
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
<source lang="java">
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(); }
}</source>
java.net.URLConnection
- A URLConnection object represents a connection to a remote machine.
- You use it to read a resource from and write to a remote machine.
- To obtain an instance of URLConnection, call the openConnection method on a URL object.
- To use a URLConnection object to write: set the value of doOutput to true using setDoOutput methods:
<source lang="java">
URL url = new URL ("http://www.google.ru/"); InputStream inputStream = url.openStream ();</source>
Preventing Automatic Redirects in a HTTP Connection
<source lang="java">
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(); }
}</source>
Read a GIF or CLASS from an URL and save it locally
<source lang="java">
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(); }
}</source>
Read from a URL with buffered stream
<source lang="java">
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(); } }
}</source>
Sending a Cookie to an HTTP Server
<source lang="java">
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(); }
}</source>
Sending a POST Request Using a URL
<source lang="java">
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(); }
}</source>
Sending a POST Request with Parameters From a Java Class
<source lang="java">
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(); }
}</source>
URLConnection.openStream is more powerful than URL.openStream
Reading a Web resource"s headers and content:
<source lang="java">
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(); } }
}</source>
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.
<source lang="java">
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(); }
}</source>