El JDK proporciona algún soporte para las solicitudes de protocolo sin estado (HTTP) a continuación. Describiré un pequeño ejemplo (componente) que escribí:
Primero construyamos una clase de solicitud (httprequester).
Esta clase encapsula el código de Java para implementar solicitudes simples, de la siguiente manera:
La copia del código es la siguiente:
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.nio.charset.charset;
import java.util.map;
import java.util.vector;
/**
* Objeto de solicitud HTTP
*
* @author yymmiinngg
*/
clase pública httprequester {
cadena privada defaultContentEncoding;
public httprequester () {
this.defaultContentEncoding = charset.defaultcharset (). name ();
}
/**
* Enviar una solicitud GET
*
* @param urlstring
* Dirección de URL
* @return objeto de respuesta
* @throws ioexception
*/
public httPrespons sendget (string urlstring) lanza ioexception {
devolver esto.send (urlstring, "get", null, null);
}
/**
* Enviar una solicitud GET
*
* @param urlstring
* Dirección de URL
* @param params
* Conjunto de parámetros
* @return objeto de respuesta
* @throws ioexception
*/
Public httPrespons sendget (string urlString, map <string, string> params)
lanza ioexception {
devolver esto.send (urlString, "get", params, null);
}
/**
* Enviar una solicitud GET
*
* @param urlstring
* Dirección de URL
* @param params
* Conjunto de parámetros
* @Param Propiedades
* Solicitar atributos
* @return objeto de respuesta
* @throws ioexception
*/
public HttPrespons sendget (string urlString, map <string, string> params,
Map <string, string> propiedades) lanza ioexception {
devolver esto.send (urlString, "get", params, propiedades);
}
/**
* Enviar solicitud de publicación
*
* @param urlstring
* Dirección de URL
* @return objeto de respuesta
* @throws ioexception
*/
public HttPrespons SendPost (String UrlString) lanza ioexception {
devolver esto.send (urlstring, "post", nulo, nulo);
}
/**
* Enviar solicitud de publicación
*
* @param urlstring
* Dirección de URL
* @param params
* Conjunto de parámetros
* @return objeto de respuesta
* @throws ioexception
*/
Public httPrespons sendPost (String urlString, map <string, string> params)
lanza ioexception {
devolver esto.send (urlString, "post", params, nulo);
}
/**
* Enviar solicitud de publicación
*
* @param urlstring
* Dirección de URL
* @param params
* Conjunto de parámetros
* @Param Propiedades
* Solicitar atributos
* @return objeto de respuesta
* @throws ioexception
*/
public HttPrespons sendPost (String URLString, MAP <String, String> Params,
Map <string, string> propiedades) lanza ioexception {
devolver esto.send (urlString, "post", params, propiedades);
}
/**
* Enviar solicitud HTTP
*
* @param urlstring
* @return objeto de reflexión
* @throws ioexception
*/
send de httprespons privado (string urlString, método de cadena,
MAP <String, String> Parámetros, Map <String, String> Propiedades)
lanza ioexception {
Httpurlconnection urlconnection = null;
if (método.equalSignorEcase ("get") && parámetros! = null) {
StringBuffer param = new StringBuffer ();
int i = 0;
for (clave de cadena: parámetros.keyset ()) {
if (i == 0)
param.append ("?");
demás
param.append ("&");
param.append (clave) .Append ("="). append (parámetros.get (key));
i ++;
}
urlString += param;
}
Url url = nueva url (urlstring);
urlconnection = (httpurlconnection) url.openconnection ();
urlconnection.setRequestMethod (método);
urlconnection.setDoOutput (verdadero);
urlconnection.setDoInput (verdadero);
urlconnection.setUsecaches (falso);
if (Propertys! = NULL)
for (tecla de cadena: propiedad.KeySet ()) {
urlconnection.addRequestProperty (Key, Properties.get (Key));
}
if (método.equalSignorEcase ("post") && parámetros! = null) {
StringBuffer param = new StringBuffer ();
for (clave de cadena: parámetros.keyset ()) {
param.append ("&");
param.append (clave) .Append ("="). append (parámetros.get (key));
}
urlconnection.getOutputStream (). Write (Param.ToString (). GetBytes ());
urlconnection.getOutputStream (). Flush ();
urlconnection.getOutputStream (). Close ();
}
devolver esto.makeContent (urlstring, urlconnection);
}
/**
* Obtenga el objeto de respuesta
*
* @param urlconnection
* @return objeto de respuesta
* @throws ioexception
*/
Private httPrespons MakeContent (String UrlString,
Httpurlconnection urlconnection) lanza ioexception {
HttPrespons httPresponser = new httPrespons ();
intentar {
InputStream in = urlconnection.getInputStream ();
BufferedReader BufferedReader = new BufferedReader (
nuevo InputStreamReader (in));
httpponser.contentCollection = new Vector <String> ();
StringBuffer temp = new StringBuffer ();
String line = bufferedReader.readline ();
while (line! = null) {
httpresponser.contentCollection.add (línea);
temp.append (línea) .append ("/r/n");
línea = bufferedReader.readline ();
}
BufferedReader.close ();
Cadena ecod = urlconnection.getContentEncoding ();
if (ecod == null)
ecod = this.defaultContentEncoding;
httpponser.urlString = urlString;
httpponser.defaultport = urlconnection.getUrl (). getDefaultport ();
httpponser.file = urlconnection.getUrl (). getFile ();
httpponser.host = urlconnection.getUrl (). gethost ();
httpponser.path = urlconnection.getUrl (). getPath ();
httpponser.port = urlconnection.getUrl (). getPort ();
httpponser.protocol = urlconnection.getUrl (). getProtocol ();
httpponser.query = urlconnection.getUrl (). getQuery ();
httpponser.ref = urlconnection.getUrl (). getRef ();
httpponser.userinfo = urlconnection.getUrl (). getUserInfo ();
httpponser.content = new String (temp.toString (). getBytes (), ECOD);
httpponser.contentEncoding = ecod;
httpponser.code = urlconnection.getResponseCode ();
httpponser.message = urlconnection.getResponseMessage ();
httpresponser.contentType = urlConnection.getContentType ();
httpponser.method = urlconnection.getRequestMethod ();
httpponser.connecttimeout = urlConnection.getConnectTimeOut ();
httpponser.readtimeout = urlconnection.getReadTimeOut ();
devolver httPresponser;
} Catch (ioException e) {
tirar E;
} finalmente {
if (urlconnection! = null)
urlconnection.disconnect ();
}
}
/**
* El conjunto de caracteres de respuesta predeterminado
*/
Cadena pública getDefaultContentEncoding () {
Devuelve esto.defaultContentEncoding;
}
/**
* Establezca el conjunto de caracteres de respuesta predeterminado
*/
public void setDefaultContentEncoding (String DefaultContentEncoding) {
this.DefaultContentEncoding = DefaultContentEncoding;
}
}
En segundo lugar, echemos un vistazo al objeto de respuesta (httprespons). El objeto de respuesta es en realidad solo un frijol de datos, que encapsula los datos de resultados de la respuesta de la solicitud, de la siguiente manera:
La copia del código es la siguiente:
import java.util.vector;
/**
* Objeto de respuesta
*/
clase pública httPrespons {
Cadena urlstring;
int defaultport;
Archivo de cadena;
Host de cadena;
Ruta de cadena;
Int Port;
Protocolo de cadena;
Consulta de cadena;
Cadena ref;
String UserInfo;
String ContentEncoding;
Contenido de cadena;
String ContentType;
Código int;
Mensaje de cadena;
Método de cadena;
int ConnectTimeOut;
int LadtimeOut;
Vector <String> ContentCollection;
public String getContent () {
devolver contenido;
}
public String getContentType () {
devolver contentType;
}
public int getCode () {
código de retorno;
}
public String getMessage () {
Mensaje de devolución;
}
Public Vector <String> getContentCollection () {
return contentCollection;
}
public String getContentEncoding () {
devolver contenidocoding;
}
cadena pública getMethod () {
método de retorno;
}
public int getConnectTimeOut () {
devolver ConnectTimeOut;
}
public int getReadtimeout () {
devolver el tiempo de lectura;
}
public String getUrlString () {
regresar urlstring;
}
public int getDefaultPort () {
return Defaultport;
}
public String getFile () {
Revolver archivo;
}
public String gethost () {
Host de regreso;
}
public String getPath () {
ruta de retorno;
}
public int getPort () {
puerto de retorno;
}
public String getProtocol () {
protocolo de retorno;
}
public String getQuery () {
consulta de regreso;
}
public String getRef () {
RETURN REF;
}
public String getUserInfo () {
devolver userInfo;
}
}
Finalmente, escribamos una clase de aplicación para probar si el código anterior es correcto
La copia del código es la siguiente:
import com.yao.http.httprequester;
import com.yao.http.httPrespons;
Prueba de clase pública {
public static void main (string [] args) {
intentar {
Httprequester solicitud = new httprequester ();
HttPrespons HR = request.sendget ("// www.vevb.com");
System.out.println (hr.getUrlString ());
System.out.println (hr.getProtocol ());
System.out.println (hr.gethost ());
System.out.println (hr.getPort ());
System.out.println (hr.getContentEncoding ());
System.out.println (hr.getMethod ());
System.out.println (hr.getContent ());
} Catch (Exception e) {
E.PrintStackTrace ();
}
}
}