© 1997 Elliotte Rusty Harold10/7/2015 URLs, InetAddresses, and URLConnections High Level Network Programming Elliotte Rusty Harold

Slides:



Advertisements
Similar presentations
Prepared By E. Musa Alyaman1 URLs, InetAddresses, and URLConnections Chapter 9.
Advertisements

1 HTTP – HyperText Transfer Protocol Part 1. 2 Common Protocols In order for two remote machines to “ understand ” each other they should –‘‘ speak the.
1 Java Networking – Part I CS , Spring 2008/9.
Layer 7- Application Layer
16-Jun-15 HTTP Hypertext Transfer Protocol. 2 HTTP messages HTTP is the language that web clients and web servers use to talk to each other HTTP is largely.
Networking Support In Java 2 Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
1 Java Networking CS , Spring 2008/9. 2 Today’s Menu Networking Basics  TCP, UDP, Ports, DNS, Client-Server Model TCP/IP in Java Sockets URL 
HTTP Hypertext Transfer Protocol. HTTP messages HTTP is the language that web clients and web servers use to talk to each other –HTTP is largely “under.
Prepared By E.Musa Alyaman1 Chapter 3 Internet Addressing.
Internet Programming In Java. References Java.sun.com Java552 Many of the programs shown.
1 Web Search Interfaces. 2 Web Search Interface Web search engines of course need a web-based interface. Search page must accept a query string and submit.
28-Jun-15 Basic Protocols. 2 Sockets Sockets, or ports, are a very low level software construct that allows computers to talk to one another When you.
13-Jul-15 Sockets and URLs. 2 Sockets A socket is a low-level software device for connecting two computers together Sockets can also be used to connect.
HTTP Overview Vijayan Sugumaran School of Business Administration Oakland University.
15-Jul-15 Basic Protocols. 2 Sockets Sockets, or ports, are a very low level software construct that allows computers to talk to one another When you.
Hypertext Transport Protocol CS Dick Steflik.
© 2000 Elliotte Rusty Harold8/8/2015 Java Network Programming Elliotte Rusty Harold
Networking java.net package, which provides support for networking. Its creators have called Java “programming for the Internet.” Socket :- A network socket.
© 1999 Elliotte Rusty Harold8/16/2015 URLs, InetAddresses, and URLConnections High Level Network Programming Elliotte Rusty Harold
FALL 2005CSI 4118 – UNIVERSITY OF OTTAWA1 Part 4 Web technologies: HTTP, CGI, PHP,Java applets)
Simple Web Services. Internet Basics The Internet is based on a communication protocol named TCP (Transmission Control Protocol) TCP allows programs running.
FTP (File Transfer Protocol) & Telnet
Appendix F: Network Programming in Java ©SoftMoore ConsultingSlide 1.
Simple Web Services. Internet Basics The Internet is based on a communication protocol named TCP (Transmission Control Protocol) TCP allows programs running.
CP476 Internet Computing Lecture 5 : HTTP, WWW and URL 1 Lecture 5. WWW, HTTP and URL Objective: to review the concepts of WWW to understand how HTTP works.
TCP/IP Protocol Suite 1 Chapter 22 Upon completion you will be able to: World Wide Web: HTTP Understand the components of a browser and a server Understand.
Application Protocols: HTTP CSNB534 Semester 2, 2007/2008 Asma Shakil.
Copyright (c) 2010, Dr. Kuanchin Chen1 The Client-Server Architecture of the WWW Dr. Kuanchin Chen.
4-Oct-15 Basic Protocols. 2 Sockets Sockets, or ports, are a very low level software construct that allows computers to talk to one another When you send.
USING PERL FOR CGI PROGRAMMING
1 CSC111H Client-Server: An Introduction Dennis Burford
DBI Representation and Management of Data on the Internet.
Object Oriented Programming in Java Lecture 16. Networking in Java Concepts Technicalities in java.
1 Chapter 28 Networking. 2 Objectives F To comprehend socket-based communication in Java (§28.2). F To understand client/server computing (§28.2). F To.
NETWORK PROGRAMMING.
Java IO. Why IO ? Without I/O, your program is a closed box. Without I/O, your program is a closed box. I/O gives your Java program access to your hard.
Appendix E: Overview of HTTP ©SoftMoore ConsultingSlide 1.
1 WWW. 2 World Wide Web Major application protocol used on the Internet Simple interface Two concepts –Point –Click.
2: Application Layer 1 Chapter 2: Application layer r 2.1 Principles of network applications  app architectures  app requirements r 2.2 Web and HTTP.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 1 Fundamentals.
27.1 Chapter 27 WWW and HTTP Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Internet Applications (Cont’d) Basic Internet Applications – World Wide Web (WWW) Browser Architecture Static Documents Dynamic Documents Active Documents.
CSI 3125, Preliminaries, page 1 Networking. CSI 3125, Preliminaries, page 2 Networking A network represents interconnection of computers that is capable.
Overview of Servlets and JSP
URL Programming Mimi Opkins CECS277. What is a URL?  URL is an acronym for Uniform Resource Locator and is a reference (an address) to a resource on.
MT311 Java Application Development and Programming Languages Li Tak Sing ( 李德成 )
Agenda Socket Programming The OSI reference Model The OSI protocol stack Sockets Ports Java classes for sockets Input stream and.
Simple Web Services. Internet Basics The Internet is based on a communication protocol named TCP (Transmission Control Protocol) TCP allows programs running.
Networking review Chapter 1, Chapter 2, Chapter 3 1.
Network Programming. These days almost all devices.
Web Server Design Week 3 Old Dominion University Department of Computer Science CS 495/595 Spring 2006 Michael L. Nelson 1/23/06.
Network Programming Communication between processes Many approaches:
Prepared by: Dr. Abdallah Mohamed, AOU-KW Unit9: Internet programming 1.
HTTP – An overview.
Network Programming Introduction
Network Programming Introduction
Sockets and URLs 17-Sep-18.
IS333D: MULTI-TIER APPLICATION DEVELOPMENT
Sockets and URLs 13-Nov-18.
Clients and Servers 19-Nov-18.
Basic Protocols 24-Nov-18.
URL in Java C343 Lab (Week 13).
Clients and Servers 1-Dec-18.
Networking.
Sockets and URLs 3-Dec-18.
Basic Protocols 19-Feb-19.
HTTP Hypertext Transfer Protocol
Web APIs API = Application Programmer Interface
Clients and Servers 19-Jul-19.
Clients and Servers 13-Sep-19.
Presentation transcript:

© 1997 Elliotte Rusty Harold10/7/2015 URLs, InetAddresses, and URLConnections High Level Network Programming Elliotte Rusty Harold

© 1997 Elliotte Rusty Harold10/7/2015 We will learn how Java handles Internet Addresses URLs CGI URLConnection Content and Protocol handlers

© 1997 Elliotte Rusty Harold10/7/2015 I assume you Understand basic Java syntax and I/O Have a user’s view of the Internet No prior network programming experience

© 1997 Elliotte Rusty Harold10/7/2015 Applet Network Security Restrictions Applets may: –send data to the code base –receive data from the code base Applets may not: –send data to hosts other than the code base –receive data from hosts other than the code base

© 1997 Elliotte Rusty Harold10/7/2015 Some Background Hosts Internet Addresses Ports Protocols

© 1997 Elliotte Rusty Harold10/7/2015 Hosts Devices connected to the Internet are called hosts Most hosts are computers, but hosts also include routers, printers, fax machines, soda machines, bat houses, etc.

© 1997 Elliotte Rusty Harold10/7/2015 Internet addresses Every host on the Internet is identified by a unique, four-byte Internet Protocol (IP) address. This is written in dotted quad format like where each byte is an unsigned integer between 0 and 255. There are about four billion unique IP addresses, but they aren’t very efficiently allocated

© 1997 Elliotte Rusty Harold10/7/2015 Domain Name System (DNS) Numeric addresses are mapped to names like " or "star.blackstar.com" by DNS. Each site runs domain name server software that translates names to IP addresses and vice versa DNS is a distributed system

© 1997 Elliotte Rusty Harold10/7/2015 The InetAddress Class The java.net.InetAddress class represents an IP address. It converts numeric addresses to host names and host names to numeric addresses. It is used by other network classes like Socket and ServerSocket to identify hosts

© 1997 Elliotte Rusty Harold10/7/2015 Creating InetAddresses There are no public InetAddress() constructors. Arbitrary addresses may not be created. All addresses that are created must be checked with DNS

© 1997 Elliotte Rusty Harold10/7/2015 The getByName() factory method public static InetAddress getByName(String host) throws UnknownHostException InetAddress utopia, duke; try { utopia = InetAddress.getByName("utopia.poly.edu"); duke = InetAddress.getByName(" "); } catch (UnknownHostException e) { System.err.println(e); }

© 1997 Elliotte Rusty Harold10/7/2015 Other ways to create InetAddress objects public static InetAddress[] getAllByName(String host) throws UnknownHostException public static InetAddress getLocalHost() throws UnknownHostException

© 1997 Elliotte Rusty Harold10/7/2015 Getter Methods public boolean isMulticastAddress() public String getHostName() public byte[] getAddress() public String getHostAddress()

© 1997 Elliotte Rusty Harold10/7/2015 Utility Methods public int hashCode() public boolean equals(Object o) public String toString()

© 1997 Elliotte Rusty Harold10/7/2015 Ports In general a host has only one Internet address This address is subdivided into 65,536 ports Ports are logical abstractions that allow one host to communicate simultaneously with many other hosts Many services run on well-known ports. For example, http tends to run on port 80

© 1997 Elliotte Rusty Harold10/7/2015 Protocols A protocol defines how two hosts talk to each other. The daytime protocol, RFC 867, specifies an ASCII representation for the time that's legible to humans. The time protocol, RFC 868, specifies a binary representation, for the time that's legible to computers. There are thousands of protocols, standard and non-standard

© 1997 Elliotte Rusty Harold10/7/2015 IETF RFCs Requests For Comment Document how much of the Internet works Various status levels from obsolete to required to informational TCP/IP, telnet, SMTP, MIME, HTTP, and more

© 1997 Elliotte Rusty Harold10/7/2015 W3C Standards IETF is based on “rough consensus and running code” W3C tries to run ahead of implementation IETF is an informal organization open to participation by anyone W3C is a vendor consortium open only to companies

© 1997 Elliotte Rusty Harold10/7/2015 URLs A URL, short for "Uniform Resource Locator", is a way to unambiguously identify the location of a resource on the Internet.

© 1997 Elliotte Rusty Harold10/7/2015 Example URLs file:///Macintosh%20HD/Java/Docs/JDK% %20docs/api/ja va.net.InetAddress.html#_top_ ftp://ftp.info.apple.com/pub/ telnet://utopia.poly.edu

© 1997 Elliotte Rusty Harold10/7/2015 The Pieces of a URL Most URLs can be broken into about five pieces, not all of which are necessarily present in any given URL. These are: –the protocol –the host –the port –the file –the ref, section, or anchor

© 1997 Elliotte Rusty Harold10/7/2015 The java.net.URL class A URL object represents a URL. The URL class contains methods to –create new URLs –parse the different parts of a URL –get an input stream from a URL so you can read data from a server –get content from the server as a Java object

© 1997 Elliotte Rusty Harold10/7/2015 Content and Protocol Handlers Content and protocol handlers separate the data being downloaded from the the protocol used to download it. The protocol handler negotiates with the server and parses any headers. It gives the content handler only the actual data of the requested resource. The content handler translates those bytes into a Java object like an InputStream or ImageProducer.

© 1997 Elliotte Rusty Harold10/7/2015 Finding Protocol Handlers When you construct a URL object, the virtual machine looks for a protocol handler that understands the protocol part of the URL such as "http" or "mailto". If no such handler is found, the constructor throws a MalformedURLException.

© 1997 Elliotte Rusty Harold10/7/2015 Supported Protocols The exact protocols that Java supports vary from implementation to implementation though http and file are supported pretty much everywhere. Sun's JDK 1.1 understands ten: –file –ftp –gopher –http –mailto –appletresource –doc –netdoc –systemresource –verbatim

© 1997 Elliotte Rusty Harold10/7/2015 URL Constructors There are four constructors in the java.net.URL class. All can throw MalformedURLException s. public URL(String u) throws MalformedURLException public URL(String protocol, String host, String file) throws MalformedURLException public URL(String protocol, String host, int port, String file) throws MalformedURLException public URL(URL context, String u) throws MalformedURLException

© 1997 Elliotte Rusty Harold10/7/2015 Constructing URL Objects Construct a URL object for a complete, absolute URL like like this: try { URL u = new URL(" ); } catch (MalformedURLException e) {}

© 1997 Elliotte Rusty Harold10/7/2015 Constructing URL Objects in Pieces You can also construct the URL by passing its pieces to the constructor, like this: URL u = null; try { u = new URL("http", " "/schedule/fall97/bgrad.html#cs"); } catch (MalformedURLException e) {}

© 1997 Elliotte Rusty Harold10/7/2015 Including the Port URL u = null; try { u = new URL("http", " 8000, "/fall97/grad.html#cs"); } catch (MalformedURLException e) {}

© 1997 Elliotte Rusty Harold10/7/2015 Relative URLs Many HTML files contain relative URLs. Consider the page On this page a link to “books.html" refers to

© 1997 Elliotte Rusty Harold10/7/2015 Constructing Relative URLs The fourth constructor creates URLs relative to a given URL. For example, try { URL u1 = new URL(" URL u2 = new URL(u1, ”books.html"); } catch (MalformedURLException e) {} This is particularly useful when parsing HTML.

© 1997 Elliotte Rusty Harold10/7/2015 Parsing URLs The java.net.URL class has five methods to spilt a URL into its component parts. These are: – public String getProtocol() – public String getHost() – public int getPort() – public String getFile() – public String getRef()

© 1997 Elliotte Rusty Harold10/7/2015 For example, try { URL u = new URL(" "); System.out.println("The protocol is " + u.getProtocol()); System.out.println("The host is " + u.getHost()); System.out.println("The port is " + u.getPort()); System.out.println("The file is " + u.getFile()); System.out.println("The anchor is " + u.getRef()); } catch (MalformedURLException e) { }

© 1997 Elliotte Rusty Harold10/7/2015 Missing Pieces If a port is not explicitly specified in the URL it's set to -1. This means the default port is to be used. If the ref doesn't exist, it's just null, so watch out for NullPointerException s. Better yet, test to see that it's non-null before using it. If the file is left off completely, e.g. then it's set to "/".

© 1997 Elliotte Rusty Harold10/7/2015 Reading Data from a URL The openStream() method connects to the server specified in the URL and returns an InputStream object fed by the data from that connection. public final InputStream openStream() throws IOException Any headers that precede the actual data are stripped off before the stream is opened. Network connections are less reliable and slower than files. Buffer with a BufferedInputStream or a BufferedReader.

© 1997 Elliotte Rusty Harold10/7/2015 import java.net.*; import java.io.*; public class Webcat { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { try { URL u = new URL(args[i]); InputStream in = u.openStream(); InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String theLine; while ((theLine = br.readLine()) != null) { System.out.println(theLine); } catch (MalformedURLException e) { System.err.println(e);} catch (IOException e) { System.err.println(e);} }

© 1997 Elliotte Rusty Harold10/7/2015 CGI Common Gateway Interface A lot is written about writing server side CGI. I’m going to show you client side CGI. We’ll need to explore HTTP a little deeper to do this

© 1997 Elliotte Rusty Harold10/7/2015 Normal web surfing uses these two steps: –The browser request a page –The server sends the page Data flows primarily from the server to the client.

© 1997 Elliotte Rusty Harold10/7/2015 Forms There are times when the server needs to get data from the client rather than the other way around. The common way to do this is with a form like this one:

© 1997 Elliotte Rusty Harold10/7/2015 CGI The user types the requested data into the form and hits the submit button. The client browser then sends the data to the server using the Common Gateway Interface, CGI for short. CGI uses the HTTP protocol to transmit the data, either as part of the query string or as separate data following the MIME header.

© 1997 Elliotte Rusty Harold10/7/2015 GET and POST When the data is sent as a query string included with the file request, this is called CGI GET. When the data is sent as data attached to the request following the MIME header, this is called CGI POST

© 1997 Elliotte Rusty Harold10/7/2015 HTTP Web browsers communicate with web servers through a standard protocol known as HTTP, an acronym for HyperText Transfer Protocol. This protocol defines –how a browser requests a file from a web server –how a browser sends additional data along with the request (e.g. the data formats it can accept), –how the server sends data back to the client –response codes

© 1997 Elliotte Rusty Harold10/7/2015 A Typical HTTP Connection –Client opens a socket to port 80 on the server. –Client sends a GET request including the name and path of the file it wants and the version of the HTTP protocol it supports. –The client sends a MIME header. –The client sends a blank line. –The server sends a MIME header –The server sends the data in the file. –The server closes the connection.

© 1997 Elliotte Rusty Harold10/7/2015 MIME MIME is an acronym for "Multipurpose Internet Mail Extensions". an Internet standard defined in RFCs 2045 through 2049 originally intended for use with messages, but has been been adopted for use in HTTP.

© 1997 Elliotte Rusty Harold10/7/2015 Browser Request MIME Header When the browser sends a request to a web server, it also sends a MIME header. MIME headers contain name-value pairs, essentially a name followed by a colon and a space, followed by a value. Connection: Keep-Alive User-Agent: Mozilla/3.01 (Macintosh; I; PPC) Host: Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

© 1997 Elliotte Rusty Harold10/7/2015 Server Response MIME Header When a web server responds to a web browser it sends a MIME header along with the response that looks something like this: Server: Netscape-Enterprise/2.01 Date: Sat, 02 Aug :52:46 GMT Accept-ranges: bytes Last-modified: Tue, 29 Jul :06:46 GMT Content-length: 2810 Content-type: text/html

© 1997 Elliotte Rusty Harold10/7/2015 Query Strings CGI GET data is sent in URL encoded query strings a query string is a set of name=value pairs separated by ampersands Author=Sadie, Julie&Title=Women Composers separated from rest of URL by a question mark

© 1997 Elliotte Rusty Harold10/7/2015 URL Encoding Alphanumeric ASCII characters (a-z, A-Z, and 0-9) and the $-_.!*'(), punctuation symbols are left unchanged. The space character is converted into a plus sign (+). Other characters (e.g. &, =, ^, #, %, ^, {, and so on) are translated into a percent sign followed by the two hexadecimal digits corresponding to their numeric value.

© 1997 Elliotte Rusty Harold10/7/2015 For example, The comma is ASCII character 44 (decimal) or 2C (hex). Therefore if the comma appears as part of a URL it is encoded as %2C. The query string "Author=Sadie, Julie&Title=Women Composers" is encoded as: –Author=Sadie%2C+Julie&Title=Women+Composers

© 1997 Elliotte Rusty Harold10/7/2015 The URLEncoder class The java.net.URLEncoder class contains a single static method which encodes strings in x-www-form-url-encoded format URLEncoder.encode(String s)

© 1997 Elliotte Rusty Harold10/7/2015 For example, String qs = "Author=Sadie, Julie&Title=Women Composers"; String eqs = URLEncoder.encode(qs); System.out.println(eqs); This prints: Author%3dSadie%2c+Julie%26Title%3dWomen+Compos ers

© 1997 Elliotte Rusty Harold10/7/2015 String eqs = "Author=" + URLEncoder.encode("Sadie, Julie"); eqs += "&"; eqs += "Title="; eqs += URLEncoder.encode("Women Composers"); This prints the properly encoded query string: Author=Sadie%2c+Julie&Title=Women+Composers

© 1997 Elliotte Rusty Harold10/7/2015 GET URLs String eqs = "Author=" + URLEncoder.encode("Sadie, Julie"); eqs += "&"; eqs += "Title="; eqs += URLEncoder.encode("Women Composers"); try { URL u = new URL(" + eqs); InputStream in = u.openStream(); //... } catch (IOException e) { //...

© 1997 Elliotte Rusty Harold10/7/2015 URLConnections The java.net.URLConnection class is an abstract class that handles communication with different kinds of servers like ftp servers and web servers. Protocol specific subclasses of URLConnection handle different kinds of servers. By default, connections to HTTP URLs use the GET method.

© 1997 Elliotte Rusty Harold10/7/2015 URLConnections vs. URLs Can send output as well as read input Can post data to CGIs Can read headers from a connection

© 1997 Elliotte Rusty Harold10/7/2015 URLConnection five steps: 1. The URL is constructed. 2. The URL’s openConnection() method creates the URLConnection object. 3. The parameters for the connection and the request properties that the client sends to the server are set up. 4. The connect() method makes the connection to the server. 5. The response header information is read using getHeaderField().

© 1997 Elliotte Rusty Harold10/7/2015 I/O Across a URLConnection Data may be read from the connection in one of two ways –raw by using the input stream returned by getInputStream() –through a content handler with getContent(). Data can be sent to the server using the output stream provided by getOutputStream().

© 1997 Elliotte Rusty Harold10/7/2015 For example, try { URL u = new URL(" URLConnection uc = u.openConnection(); uc.connect(); InputStream in = uc.getInputStream(); // read the data... } catch (IOException e) { //...

© 1997 Elliotte Rusty Harold10/7/2015 Reading Header Data The getHeaderField(String name) method returns the string value of a named header field. Names are case-insensitive. If the requested field is not present, null is returned. String lm = uc.getHeaderField("Last-modified");

© 1997 Elliotte Rusty Harold10/7/2015 getHeaderFieldKey() The keys of the header fields are returned by the getHeaderFieldKey(int n) method. The first field is 1. If a numbered key is not found, null is returned. You can use this in combination with getHeaderField() to loop through the complete header

© 1997 Elliotte Rusty Harold10/7/2015 For example String key = null; for (int i=1; (key = uc.getHeaderFieldKey(i))!=null); i++) { System.out.println(key + ": " + uc.getHeaderField(key)); }

© 1997 Elliotte Rusty Harold10/7/2015 getHeaderFieldInt() and getHeaderFieldDate() These are utility methods that read a named header and convert its value into an int and a long respectively. public int getHeaderFieldInt(String name, int default) public long getHeaderFieldDate(String name, long default)

© 1997 Elliotte Rusty Harold10/7/2015 The long returned by getHeaderFieldDate() can be converted into a Date object using a Date() constructor like this: String s = uc.getHeaderFieldDate("Last-modified", 0); Date lm = new Date(s);

© 1997 Elliotte Rusty Harold10/7/2015 Six Convenience Methods These return the values of six particularly common header fields: public int getContentLength() public String getContentType() public String getContentEncoding() public long getExpiration() public long getDate() public long getLastModified()

© 1997 Elliotte Rusty Harold10/7/2015 try { URL u = new URL(“ URLConnection uc = u.openConnection(); uc.connect(); String key=null; for (int n = 1; (key = uc.getHeaderFieldKey(n)) != null; n++) { System.out.println(key + ": " + uc.getHeaderField(key)); } catch (IOException e) { System.err.println(e);

© 1997 Elliotte Rusty Harold10/7/2015 Writing data to a URLConnection Similar to reading data from a URLConnection. First inform the URLConnection that you plan to use it for output Before getting the connection's input stream, get the connection's output stream and write to it. Commonly used to talk to CGIs that use the POST method

© 1997 Elliotte Rusty Harold10/7/2015 Nine Steps: Construct the URL. Call the URL’s openConnection() method to create the URLConnection object. Pass true to the URLConnection’s setDoOutput() method Invoke setDoInput(true) to indicate that this URLConnection will also be used for input. Create the data you want to send, preferably as a byte array.

© 1997 Elliotte Rusty Harold10/7/2015 Call getOutputStream() to get an output stream object. Write the byte array calculated in step 5 onto the stream. Close the output stream. Call getInputStream() to get an input stream object. Read and write it as usual.

© 1997 Elliotte Rusty Harold10/7/2015 POST CGIs A typical POST request to a CGI looks like this: POST /cgi-bin/booksearch.pl HTTP/1.0 Referer: User-Agent: Mozilla/3.01 (Macintosh; I; PPC) Content-length: 60 Content-type: text/x-www-form-urlencoded Host: utopia.poly.edu:56435 username=Sadie%2C+Julie&realname=Women+Compose rs

© 1997 Elliotte Rusty Harold10/7/2015 A POST request includes the POST line a MIME header which must include –content type –content length a blank line that signals the end of the MIME header the actual data of the form, encoded in x- www-form-urlencoded format.

© 1997 Elliotte Rusty Harold10/7/2015 A URLConnection for an http URL will set up the request line and the MIME header for you as long as you set its doOutput field to true by invoking setDoOutput(true). If you also want to read from the connection, you should set doInput to true with setDoInput(true) too.

© 1997 Elliotte Rusty Harold10/7/2015 For example, URLConnection uc = u.openConnection(); uc.setDoOutput(true); uc.setDoInput(true);

© 1997 Elliotte Rusty Harold10/7/2015 The request line and MIME header are sent as soon as the URLConnection connects. Then use getOutputStream() to get an output stream on which you'll write the x- www-form-urlencoded name-value pairs.

© 1997 Elliotte Rusty Harold10/7/2015 HttpURLConnection java.net.HttpURLConnection is an abstract subclass of URLConnection that provides some additional methods specific to the HTTP protocol. URL connection objects that are returned by an http URL will be instances of java.net.HttpURLConnection.

© 1997 Elliotte Rusty Harold10/7/2015 Recall a typical HTTP response from a web server begins like this: HTTP/ OK Server: Netscape-Enterprise/2.01 Date: Sat, 02 Aug :52:46 GMT Accept-ranges: bytes Last-modified: Tue, 29 Jul :06:46 GMT Content-length: 2810 Content-type: text/html

© 1997 Elliotte Rusty Harold10/7/2015 Response Codes The getHeaderField() and getHeaderFieldKey() don't return the HTTP response code After you've connected, you can retrieve the numeric response code--200 in the above example--with the getResponseCode() method and the message associated with it-- OK in the above example--with the getResponseMessage() method.

© 1997 Elliotte Rusty Harold10/7/2015 Java 1.0 only supported GET and POST requests to HTTP servers, but Java 1.1 allows the much broader range of requests specified in the HTTP/1.1 specification including GET, POST, HEAD, OPTIONS, PUT, DELETE, and TRACE. These are set with the void setRequestMethod(String method) method. This method throws a java.net.ProtocolException, a subclass of IOException, if an unknown protocol is specified.

© 1997 Elliotte Rusty Harold10/7/2015 getRequestMethod() The getRequestMethod() method returns the string form of the request method currently set for the URLConnection. GET is the default method.

© 1997 Elliotte Rusty Harold10/7/2015 disconnect() The void disconnect() method of the HttpURLConnection class allows you to close the connection to the web server. Needed for HTTP/1.1 Keep-alive

© 1997 Elliotte Rusty Harold10/7/2015 For example, try { URL u = new URL(" HttpURLConnection huc = (HttpURLConnection) u.openConnection(); huc.setRequestMethod("PUT"); OutputStream os = huc.getOutputStream(); int code = huc.getResponseCode(); if (code >= 200 && < 300) { // put the data... } huc.disconnect(); } catch (IOException e) { //...

© 1997 Elliotte Rusty Harold10/7/2015 usingProxy The boolean usingProxy() method returns true if web connections are being funneled through a proxy server, false if they're not.

© 1997 Elliotte Rusty Harold10/7/2015 The HttpURLConnection class also has two static methods that affect how all URLConnection objects interact with web servers. With a true argument, the HttpURLConnection.setFollowRedirects(bo olean followRedirects) method says that connections will follow redirect instructions from the web server. Untrusted applets are not allowed to set this. The boolean method HttpURLConnection.getFollowRedirects() returns true if redirect requests are honored, false if they're not.

© 1997 Elliotte Rusty Harold10/7/2015 Redirect Instructions Most web servers can be configured to automatically redirect browsers to the new location of a page that's moved. To redirect browsers, a server sends a 300 level response and a Location header that specifies the new location of the requested page.

© 1997 Elliotte Rusty Harold10/7/2015 GET /~elharo/macfaq/index.html HTTP/1.0 HTTP/ Moved Temporarily Date: Mon, 04 Aug :21:27 GMT Server: Apache/1.2b7 Location: Connection: close Content-type: text/html 302 Moved Temporarily Moved Temporarily The document has moved here.

© 1997 Elliotte Rusty Harold10/7/2015 HTML is returned for browsers that don't understand redirects, but most modern browsers do not display this and jump straight to the page specified in the Location header instead. Because redirects can change the site which a user is connecting without their knowledge so redirects are not arbitrarily followed by URLConnections.

© 1997 Elliotte Rusty Harold10/7/2015 To Learn More Java Network Programming –O’Reilly & Associates, 1997 –ISBN Web Client Programming with Java – cs308/index.html