O JDK fornece algum suporte para solicitações de protocolo sem estado (HTTP).
Primeiro, vamos construir uma classe de solicitação (httprequester).
Esta classe encapsula o código para Java implementar solicitações simples, como segue:
A cópia do código é a seguinte:
importar java.io.bufferedReader;
importar java.io.ioException;
importar java.io.inputStream;
importar java.io.inputStreamReader;
importar java.net.httpurlConnection;
importar java.net.url;
importar java.nio.charset.charset;
importar java.util.map;
importar java.util.Vector;
/**
* Objeto de solicitação http
*
* @Author Yymmiinngg
*/
classe pública httprequester {
Private String DefaultContentEncoding;
public httprequester () {
this.DefaultContentEncoding = charset.defaultcharset (). name ();
}
/**
* Envie um pedido de obtenção
*
* @param urlString
* Endereço de URL
* @return Responder Object
* @THOWSows IoException
*/
public httpropon sendget (string urlstring) lança ioexception {
devolver este.send (urlstring, "Get", NULL, NULL);
}
/**
* Envie um pedido de obtenção
*
* @param urlString
* Endereço de URL
* @param params
* Conjunto de parâmetros
* @return Responder Object
* @THOWSows IoException
*/
public HTTPRESPONS sendget (String urlString, mapa <string, string> params)
lança ioexception {
retornar este.send (urlstring, "get", params, null);
}
/**
* Envie um pedido de obtenção
*
* @param urlString
* Endereço de URL
* @param params
* Conjunto de parâmetros
* Propriedades @param
* Solicitar atributos
* @return Responder Object
* @THOWSows IoException
*/
public httpropons sendget (string urlstring, mapa <string, string> params,
Mapa <string, string> Propriedades) lança ioexception {
retornar este.send (urlstring, "get", params, Properties);
}
/**
* Enviar solicitação de postagem
*
* @param urlString
* Endereço de URL
* @return Responder Object
* @THOWSows IoException
*/
public httproptons sendPost (string urlstring) lança ioexception {
retornar este.send (urlstring, "post", nulo, nulo);
}
/**
* Enviar solicitação de postagem
*
* @param urlString
* Endereço de URL
* @param params
* Conjunto de parâmetros
* @return Responder Object
* @THOWSows IoException
*/
public HTTPRESPONS sendPost (String urlString, map <string, string> params)
lança ioexception {
retornar este.send (urlstring, "post", params, nulo);
}
/**
* Enviar solicitação de postagem
*
* @param urlString
* Endereço de URL
* @param params
* Conjunto de parâmetros
* Propriedades @param
* Solicitar atributos
* @return Responder Object
* @THOWSows IoException
*/
public HTTPRESPONS sendPost (String urlString, map <string, params, params,
Mapa <string, string> Propriedades) lança ioexception {
retornar este.send (urlstring, "post", params, propriedades);
}
/**
* Enviar solicitação HTTP
*
* @param urlString
* @return Reflection Object
* @THOWSows IoException
*/
HTTPRESPONS PRIVADOS ENVIAR (URLSTRING, Método da String,
Mapa <string, string> parâmetros, mapa <string, string> Propriedades)
lança ioexception {
HttpurlConnection urlConnection = null;
if (métod.equalsignorecase ("get") && parâmetros! = null) {
StringBuffer param = new StringBuffer ();
int i = 0;
para (chave de string: parameters.keyset ()) {
if (i == 0)
param.append ("?");
outro
param.append ("&");
param.Append (key) .Append ("="). Append (parameters.get (key));
i ++;
}
urlstring += param;
}
Url url = novo url (urlstring);
urlConnection = (httpurlConnection) url.openconnection ();
urlConnection.setRequestMethod (método);
urlConnection.setDoOutput (true);
urlConnection.setDoinput (true);
urlConnection.setUseCaches (false);
if (propriedades! = nulo)
para (chave da string: Properties.KeySet ()) {
urlConnection.addRequestProperty (key, Properties.get (key));
}
if (métod.equalsignorecase ("post") && parâmetros! = null) {
StringBuffer param = new StringBuffer ();
para (chave de string: parameters.keyset ()) {
param.append ("&");
param.Append (key) .Append ("="). Append (parameters.get (key));
}
urlConnection.getOutputStream (). write (param.toString (). getBytes ());
urlConnection.getOutputStream (). Flush ();
urlConnection.getOutputStream (). Close ();
}
retornar this.makEcontent (urlString, urlConnection);
}
/**
* Obtenha o objeto de resposta
*
* @param urlConnection
* @return Responder Object
* @THOWSows IoException
*/
HTTPRESPONS PRIVADO MAKECONTENT (String UrlString,
HttpurlConnection urlConnection) lança ioexception {
HttpRespons httpResponser = new httpRespons ();
tentar {
InputStream em = urlConnection.getInputStream ();
Bufferreader buffarrederader = new BufferredReader (
novo inputStreamReader (in));
httpResponser.ContentCollection = new Vector <String> ();
StringBuffer temp = new StringBuffer ();
Linha de string = bufferredreader.readline ();
while (linha! = null) {
httproSponser.contentCollection.add (linha);
temp.append (linha) .append ("/r/n");
linha = bufferredreader.readline ();
}
BufferredReader.Close ();
String ecod = urlConnection.getContentEncoding ();
if (ecod == null)
ecod = this.defaultContentEncoding;
httproSponser.urlString = urlString;
httpResponser.DefaultPort = urlConnection.geturl (). getDefaultport ();
httpResponser.file = urlConnection.geturl (). getFile ();
httpResponser.host = urlConnection.geturl (). Gethost ();
httpResponser.path = urlConnection.geturl (). getPath ();
httpResponser.port = urlConnection.geturl (). getport ();
httpResponser.protocol = urlConnection.geturl (). getProtocol ();
httpResponser.Query = urlConnection.geturl (). getQuery ();
httpResponser.ref = urlConnection.geturl (). getRef ();
httpResponser.Userinfo = urlConnection.geturl (). getUserinfo ();
httpResponser.content = new String (temp.toString (). getBytes (), ECOD);
httproSponser.ContentEncoding = ECOD;
httpResponser.code = urlConnection.getResponsecode ();
httpResponser.message = urlConnection.getResponsemessage ();
httpResponser.contentType = urlConnection.getContentType ();
httpResponser.method = urlConnection.getRequestMethod ();
httpResponser.connectTimeout = urlConnection.getConnectTimeout ();
httpResponser.readTimeout = urlConnection.getReadTimeout ();
retornar httproSponser;
} catch (ioexception e) {
jogar e;
} finalmente {
if (urlConnection! = nulo)
urlConnection.disconnect ();
}
}
/**
* O conjunto de caracteres de resposta padrão
*/
public String getDefaultContentEncoding () {
retornar this.defaultContentEncoding;
}
/**
* Defina o conjunto de caracteres de resposta padrão
*/
public void setDefaultContentEncoding (String DefaultContentEncoding) {
this.DefaultContentEncoding = defaultContentEncoding;
}
}
Em segundo lugar, vamos dar uma olhada no objeto de resposta (httprops). O objeto de resposta é na verdade apenas um feijão de dados, que encapsula os dados de resultado da resposta da solicitação, como segue:
A cópia do código é a seguinte:
importar java.util.Vector;
/**
* Objeto de resposta
*/
classe pública httprops {
String urlString;
int defaultport;
Arquivo string;
Host de string;
Caminho do string;
int porta;
Protocolo de string;
Consulta de string;
String ref;
String userInfo;
String contentEncoding;
Conteúdo de string;
String contentType;
código int;
Mensagem de string;
Método de string;
int conectTimeout;
int readtimeout;
Vector <string> contentCollection;
public String getContent () {
retornar conteúdo;
}
public String getContentType () {
retornar contentType;
}
public int getCode () {
Código de retorno;
}
public String getMessage () {
devolver mensagem;
}
public Vector <string> getContentCollection () {
retornar contentCollection;
}
public String getContentEncoding () {
return contentncoding;
}
public String getMethod () {
método de retorno;
}
public int getConnectTimeout () {
return ConnectTimeout;
}
public int getReadTimeout () {
Retornar ReadTimeout;
}
public String getUrlString () {
retornar urlstring;
}
public int getDefaultport () {
retornar DefaultPort;
}
public String getFile () {
arquivo de retorno;
}
public string gethost () {
host de retorno;
}
public String getPath () {
caminho de retorno;
}
public int getport () {
porta de retorno;
}
public String getProtocol () {
protocolo de retorno;
}
public String getQuery () {
consulta de retorno;
}
public String getRef () {
referência de retorno;
}
public String getUserinfo () {
return userInfo;
}
}
Por fim, vamos escrever uma classe de aplicativo para testar se o código acima está correto
A cópia do código é a seguinte:
importação com.yao.http.httprequester;
importação com.yao.http.httproSpons;
Teste de classe pública {
public static void main (string [] args) {
tentar {
Solicitação httprequester = 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 (Exceção e) {
E.PrintStackTrace ();
}
}
}