1. The difference between get and post requests
A) Get requests can get static pages, or they can be placed behind a URL string, passed to the servlet,
b) The difference between post and get is that the post parameter is not placed inside the URL string, but is placed inside the body of the HTTP request.
2. Objects of URLConnection
A) Get URLConnection instances
URL url = new URL (urlstring);//Generate URLConnection object based on URL URLConnection = (httpurlconnection) url.openconnection ();
b) Common parameter settings
// set whether to export to httpurlconnection, because this is a POST request, the parameters to be placed in the // http in the body, so it needs to be set to true, by default False; httpurlconnection.setdooutput (True); // Sets whether to read in from HttpURLConnection, True; httpurlconnection.setdoinput (True) by default; // post requests cannot use the cache httpurlconnection.setusecaches (False); // sets the transferred content type to be serializable Java object // (if this item is not set, when the serialized object is transferred httpurlconnection.setrequestproperty ("Content-type", ") when the Web service defaults to not this type java.io.EOFException) Application/x-java-serialized-object "); // the method for setting the request is" POST ", the default is get Httpurlconnection.setrequestmethod ("POST");//Setting timeout (timeout), in the case of network anomalies, may cause the program to zombie without continuing to execute. System.setproperty ("sun.net.client.defaultConnectTimeout", timeout number of milliseconds string); System.setproperty ("Sun.net.client.defaultReadTimeout", time-out milliseconds string);
c) httpurlconnection writing data and sending data problems
Now constructs an object output stream object from the output stream object to implement the output serializable object. outputstream outstrm = httpurlconnection.getoutputstream (); ObjectOutputStream Objoutputstrm = new objectoutputstream (OUTSTRM); // writes out data to the object output stream, which is stored in the memory buffer Objoutputstrm.writeobject (new string ("I am test data"); // refreshes the object output stream, Writes any byte to the potential stream (ObjectOutputStream) objoutputstm.flush (); // closes the stream object. At this point, no more data can be written to the object output stream, the previously written data exists in the memory buffer, // the prepared HTTP request is formally sent to the server when the getInputStream () function is called below Objoutputstm.close (); // calls the getInputStream () function of the HttpURLConnection connection object, // A complete HTTP request message encapsulated in the memory buffer is sent to the server. inputstream instrm = httpconn.getinputstream (); // <=== Note that the code snippet that actually sent the request is here // the Httpconn.getinputstream () method above has been called, the HTTP request has ended, and the output of the bottom-to-object output stream is meaningless// both the object output stream does not call the close () method, The following operation does not write any data to the object output stream . // Therefore, you need to re-create the connection, reset the parameters, recreate the stream object, re-write the data, // resend the data if you want to resend the data ( As to whether the operation needs to be re-examined) objoutputstm.writeobject (new String ("")); httpconn.getinputstream ();
3, code instance
Package org.zhangsm.httprequest;import java.io.bufferedreader;import java.io.ioexception;import java.io.inputstream;import java.io.inputstreamreader;import java.net.httpurlconnection;import java.net.URL;import java.util.Map;/** * sends HTTP requests using Java Native APIs, which are Java.net.URL, Java.net.URLConnection. The * steps are as follows: * 1, obtaining the connector * 2 through the Uniform Resource Locator, setting the parameter of the request * 3, retrieving the returned content as an input stream * 4. Turn off input stream * @author zhang.shuming * */public class HttpRequest { public static void main (String[] args) throws exception { system.out.println (Send ("http://www.baidu.com", "GET", null, null)); } private static string Send (String urlstring,string method, map<string,string> parameters , map< String,string> propertys) throws Exception{ httpurlconnection urlconnection = null; if ( Method.equalsignorecase ("GET") && parameters != null) {Stringbuffer param = new stringbuffer (); Int i = 0;for (string key : Parameters.keyset ()) {if (i == 0) param.append ("?"); Else param.append ("&");p Aram.append (key). Append ("="). Append (Parameters.get (key));i++; } urlstring += param;} Url url = new url (urlstring);// generates URLConnection objects based on the URL urlconnection = ( httpurlconnection) url.openconnection ();// Set Parameters Urlconnection.setrequestmethod (method); Urlconnection.setdooutput (True); Urlconnection.setdoinput (true); Urlconnection.setusecaches (false); if (propertys != null) {for (string kEy : propertys.keyset ()) {Urlconnection.addrequestproperty (Key, propertys.get (key));}} if (Method.equalsignorecase ("POST") && parameters != null) {Stringbuffer param = new stringbuffer (); for (String key : parameters.keyset ()) {Param.append ("&" );p Aram.append (key). Append ("="). Append (Parameters.get (key));} Urlconnection.getoutputstream (). Write (Param.tostring (). GetBytes ()); Urlconnection.getoutputstream (). Flush (); Urlconnection.getoutputstream (). Close ();} Return makecontent (urlstring,urlconnection);} Private static string makecontent (string urlstring,httpurlconnection urlconnection) throws IOException{InputStream in = Urlconnection.getinputstream (); Bufferedreader bufferedreader = new bufferedreader (New inputstreamreader (in)); Stringbuffer temp = new stringbuffer (); String line;while ((line = bufferedreader.readline ()) != null) {temp.append (line);} Bufferedreader.close (); return temp.tostring ();}}
Ways to send HTTP requests via Java.net.URLConnection