Paket UTIL;
import java.io.IOException;import java.io 🎜>import java.text.DateFormat;
import java.util.ArrayList;
import java.util.HashMap; 🎜>import java.util.List;
import java.util.Set;
import java.util.zip .GZIPInputStream;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair ; httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params. HttpConnectionManagerParams;
/ **
* @author Liuwei
* Datum: 18. Dezember 2009
*
* TODO
* Hilfsklasse für HttpClient
* /
öffentliche Klasse HttpClientHelper
{
/ **
* Zeitüberschreitung der HttpClient-Verbindung, Zeitüberschreitungseinstellung für das Lesen von Daten (Einheit: Millisekunden)
* /
Öffentliche statische endgültige Interpretation HTTPCLIENT_CONNECTION_TIMEOUT = 30000;
Public static final int HTTPCLIENT_SO_TIMEOUT = 120000;
Public static final int HTTPMETHOD_SO_TIMEOUT = 5000;
//Lassen Sie den ConnectionManager verwalten, ob die Verbindung geschlossen werden soll
Private static boolean AlwaysClose = FALSE ;
private static string defaultEncode = "UTF-8"; private static last DateFormat DATE_FORMAT = new SimpleDateFormat("YYYY-MM-DD HH:MM:SS");
/ **
* Holen Sie sich die HttpClient-Verbindung und legen Sie die relevanten Parameter fest
*
* @return
* /
Public static HttpClient's getHttpClient()
{
HttpClient client = new HttpClient(new SimpleHttpConnectionManager(alwaysClose));
HttpConnectionManagerParams managerParams = client.getHttpConnectionManager() getParams() Methode.
//Legen Sie das Zeitlimit für die Verbindung fest (in Millisekunden)
managerParams.setConnectionTimeout (HTTPCLIENT_CONNECTION_TIMEOUT);
//Legen Sie das Zeitlimit für das Lesen von Daten fest (in Millisekunden)
managerParams.setSoTimeout (HTTPCLIENT_SO_TIMEOUT);
Zurück zum Client;
}
/ **
* Holen Sie sich die HttpClient-Verbindung und legen Sie die relevanten Parameter fest
*
* @parameter logonSite
* @parameter logonPort
* @parameter Protocol
* @return
* /
public static HttpClient getHttpClient(last string logonSite, last int logonPort, last string Protocol)
{
HttpClient client = new HttpClient( new SimpleHttpConnectionManager(alwaysClose));
client.getHostConfiguration() setHost(logonSite, logonPort, Protocol).
HttpConnectionManagerParams managerParams = client.getHttpConnectionManager() getParams()-Methode.
//Legen Sie das Zeitlimit für die Verbindung fest (in Millisekunden)
managerParams.setConnectionTimeout (HTTPCLIENT_CONNECTION_TIMEOUT);
//Legen Sie das Zeitlimit für das Lesen von Daten fest (in Millisekunden)
managerParams.setSoTimeout (HTTPCLIENT_SO_TIMEOUT);
return client; ;
boolean includeUserAgent = FALSE;
if (null = header&& false == header.isEmpty()!)
{
set
for (enter
{
if (false == includeUserAgent
&&"UserAgent".equals(entry.getKey()))
{
includeUserAgent = TRUE;
}
headers.add(new headers(entry.getKey(), enter.getValue())); >if (false == includeUserAgent)
{
headers.add(new headers(
"UserAgent" ,
"Mozilla/4.0 (Kompatibel mit; MSIE 7.0; Windows NT 5.1; GTB5; . NET CLR 1.1.4322; .NET CLR 2.0 0.50727; MAXTHON 2.0)); ;String, String> POSTDATA)
{
if (null == || POSTDATA postData.isEmpty())
{
return NULL; ;input
{
double[i++] = new NameValuePair(entry.getKey(), enter.getValue()}
Rückgabepaar;
}
/ **
*Inhaltsinformationen der Webseite anfordern
*
* @parameter HttpClient
* @parameter reqUrl
*Parametertitel
* @parameter POSTDATA
*Parameterkodierung
* @return
*/
Öffentliche statische Zeichenfolge doRequest(HttpClient HttpClient, String reqUrl,
Map
{
String htmlContent = NULL;if (null == HttpClient)
{
return htmlContent; >//Codierungseinstellungen anfordern
Encoding = (empty == binding defaultEncode: binding);//Header-Anforderungsinformationen
List
if (empty = POSTDATA! )
{
PostMethod PostMethod = new EncodePostMethod(reqUrl,kodierung);
for (head tempHeader: header)
{
postMethod.setRequestHeader(tempHeader); 🎜>//Post-Parameter-Einstellung NameValuePair [] of
= PARAMS getPairs(POSTDATA);if (leer = Parameter!)
{
postMethod.setRequestBody(PARAMS);
}
//Webseiteninhalt extrahieren
htmlContent =executeMethod(HttpClient, post-method,kodierung, getWebSite(reqUrl)); neue Implementierung getMethod(reqUrl);
for (head tempHeader: header)
{
getMethod.setRequestHeader(tempHeader);
}
//Webseiteninhalt extrahieren
htmlContent =executeMethod(HttpClient, getMethod,kodierung, NULL);
}
return htmlContent;
}
Private static String getWebSite(String reqUrl)
{
String website = NULL;
if (null == reqUrl || reqUrl.isEmpty())
{
Return website;
if (reqUrl.startsWith(prefix))
{
INT index = reqUrl.substring(prefix.length()) indexOf("/") + prefix .length();
Website = reqUrl.substring(0, index);
}
Return to website; >* @parameter HttpClient
* @parameter requestMethod
*parameterkodierung
*parameter website
* @return
* /
Privater statischer StringexecuteMethod(HttpClient HttpClient, enum HTTPMethod requestMethod, codierter String, String-Site)
{
String ResponseContent = NULL;
if (null == HttpClient)
{
Return ResponseContent; Bestimmen Sie, ob verschlüsselte Daten angefordert werden sollen
Boolean dataEncrypt = FALSE;
Header takeEncoding = requestMethod.getRequestHeader ("Accept Encoding"); leer = AcceptEncoding
. && AcceptEncoding.getValue() enthält("gzip"))
{
dataEncrypt = TRUE
}
InputStream ResponseStream = NULL
try
{
INT status = httpClient.executeMethod(requestMethod);
if (HttpStatus.SC_OK == status)
{
responseStream = requestMethod.getResponseBodyAsStream();
responseContent = getContentByStream(dataEncrypt new GZIPInputStream( ResponseStream) : ResponseStream, Encoding); . Dies ist bei einigen Anmeldungen nicht der Fall. Wichtig bei der Autorisierung der Verwendung von Cookies
Andernfalls gilt, wenn (HttpStatus.SC_MOVED_PERMANENTLY == Status
|| = Status
||. HttpStatus.SC_TEMPORARY_REDIRECT = = Status)
{
//Neue URL-Adresse lesen
Header = requestMethod.getResponseHeader("position");
if (! header = NULL )
if (empty == RedirectUrl || RedirectUrl.isEmpty())
{
redirectUrl = "/";
}
if (false == RedirectUrl.startsWith(" HTTP: //")
! && empty = website)
{
if (website.startsWith("/"))
{
redirectUrl = website+redirectUrl;
}
Andere
{
redirectUrl = website + "/" + restartUrl;
}
GetMethod weitergeleitet = neue Implementierung getMethod(redirectUrl); = requestMethod.getRequestHeader("referrer");
if (null = referrer! )
{
redirect.addRequestHeader(referrer);
}
header cookie = requestMethod.getRequestHeader("cookie");
if (null = cookie!)
{
redirect.addRequestHeader(cookie);
status = httpClient.executeMethod(redirect);
if (HttpStatus.SC_OK == status)
{
responseStream = getResponseBodyAsStream(). ;
responseContent = getContentByStream(responseStream(); } //Endstatus
} Catch Up (Exception 5)
{
e.printStackTrace ();
}Endlich
{
if (requestMethod!= NULL)
{
requestMethod.releaseConnection();
}
}
return ResponseContent;
/ **
*Informationen aus dem Stream gemäß der angegebenen Kodierung lesen
*
* @Parameter inStream
*Parameterkodierung
* @Return
* IOException auslösen
* /
Public static String getContentByStream(InputStream inStream, String-Kodierung) löst eine IOException aus
{
if (null == instream)
{
return NULL
}
Content of StringBuilder = new StringBuilder();
//Lesen Sie den Stream-Inhalt mit dem angegebenen Codierungsformat
BufferedReader reader = new BufferedReader(new InputStreamReader(Interstitial, binding));
String message = NULL; while (null = (message = reader.readLine())!)
{
content.append(message);
content.append("r n"}
//Schließen Sie den Reader und Ressourcen freigeben
reader.close();
Return (content.toString());
/ **
* Innere Klasse, geerbt von PostMethod, früher Geben Sie das Codierungsformat der Postanforderung an >{
Super(URL);
this.encode = binding; generate method stub
return (this.encode);
}
}
/ * *
*Test
*
* @parameter ARGS
* /
public static void main(String[] args)
{
//System.setProperty( "http.proxyHost", "165.228.128.10");
//System. setProperty("http.proxyPort", "3128");
//System.setProperty("http.proxySet", "true ");
String reqUrl = " http:// news.39.net/jbyw/index.html ";
reqUrl = " http://news.39.net/ a/2010722/1404231.html ";
Map
headers.put("Akzeptiere die Codierung", "gzip,deflate"); HttpClient, reqUrl, headers, null, "GBK");
System.out.println(htmlContent);
}