import com.sonalb.net.http.cookie.*;
import java.net.*;
import java.io.*;
...
public class Example
{
...
public void someMethod()
{
...
URL url = new URL("http://www.site.com/");
HttpURLConnection hUC = (HttpURLConnection) url.openConnection();
//在這里初始化HttpURLConnection.
...
huc.connect();
InputStream is = huc.getInputStream();
Client client = new Client();
CookieJar cj = client.getCookies(huc);
//進(jìn)行一些處理
...
huc.disconnect();
// 執(zhí)行另一請(qǐng)求
url = new URL("http://www.site.com/");
huc = (HttpURLConnection) url.openConnection();
client.setCookies(huc, cj);
huc.connect();
...
// 進(jìn)行一些處理
}
}
package com.sonalb.net.http;
import com.sonalb.net.http.cookie.*;
import java.net.*;
import java.io.*;
public class HTTPRedirectHandler
{
...
public HTTPRedirectHandler(HttpURLConnection huc)
{
...
}
public void connect() throws IOException
{
if(bConnected)
{
throw new IllegalStateException("No can do. Already connected.");
}
int code;
URL url;
huc.setFollowRedirects(false);
// 設(shè)置在Cookies中的檢驗(yàn)
if(!cj.isEmpty())
{
client.setCookies(huc,cj);
}
is = huc.getInputStream();
// 從HttpURLConnection中提取Cookies并加到CookieJar中去
cj.addAll(Client.getCookies(huc));
while((code = huc.getResponseCode()) != successCode && maxRedirects > 0)
{
if(code != 302)
{
throw new IOException("Can't deal with this code (" + code + ").");
}
is.close();
is = null;
url = new URL(huc.getHeaderField("location"));
huc.disconnect();
huc = null;
huc = (HttpURLConnection) url.openConnection();
//和HTTP請(qǐng)求一起發(fā)送Cookies
Client.setCookies(huc, cj);
huc.setFollowRedirects(false);
huc.connect();
is = huc.getInputStream();
//從響應(yīng)中提取Cookies并加進(jìn)jar中去
cj.addAll(Client.getCookies(huc));
maxRedirects--;
}
if(maxRedirects <= 0 && code != successCode)
{
throw new IOException("Max redirects exhausted.");
}
bConnected = true;
}
//其他方法在這里出現(xiàn)
public void handleCookies(boolean b)
{
...
}
public void setSuccessCode(int i)
{
...
}
public void setCookieJar(CookieJar cj)
{
...
}
public void addCookies(CookieJar cj)
{
...
}
public CookieJar getCookieJar()
{
...
}
public HttpURLConnection getConnection()
{
...
}
public void setMaxRedirects(int i)
{
...
}
}
public boolean doLogin() throws Exception
{
//對(duì)于HTTPS初始化JSSE
System.getProperties().put("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
//創(chuàng)建HttpURLConnection并初始化
URL url = new URL("https://lc2.law13.hotmail.passport.com/cgi-bin/dologin");
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
huc.setDoOutput(true);
huc.setRequestMethod("POST");
huc.setRequestProperty("User-Agent","Mozilla/4.7 [en] (Win98; I)");
//發(fā)送登錄表單字段
StringBuffer sb = new StringBuffer();
sb.append("login="); sb.append(URLEncoder.encode(user));
...
OutputStream os = huc.getOutputStream();
os.write(sb.toString().getBytes("US-ASCII"));
os.close();
//創(chuàng)建句柄并進(jìn)行處理
HTTPRedirectHandler hrh = new HTTPRedirectHandler(huc);
hrh.connect();
huc = hrh.getConnection();
//Microsoft有一個(gè)中間過渡頁使用了一個(gè)刷新元標(biāo)簽以便于在HTTPS和HTTP間轉(zhuǎn)換,這將防止安全
//警告彈出
//我們需要通過讀取響應(yīng)和解析URL手動(dòng)取出URL
BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream()));
...
//一旦我們有了主頁的URL,我們就又使用HTTPRedirectHandler重定向并處理響應(yīng)以校驗(yàn)正確的注
//冊(cè)
url = new URL(homeUrl);
huc = (HttpURLConnection) url.openConnection();
huc.setRequestProperty("User-Agent","Mozilla/4.7 [en] (Win98; I)");
hrh = new HTTPRedirectHandler(huc);
hrh.setCookieJar(cj);
hrh.connect();
...
//保存Cookies用于以后的請(qǐng)求
cj.addAll(hrh.getCookieJar());
...
return(bLoggedIn);
}
import java.io.*;
import org.w3c.tidy.*;
public class ConvertBadHTMLToGood
{
...
public ConvertBadHTMLToGood(Reader r)
{
if(r == null)
{
throw new IllegalArgumentException();
}
inReader = r;
}
public Reader doConvert() throws IOException
{
//初始化JTidy對(duì)象
Tidy tidy = new Tidy();
tidy.setXmlOut(true);
tidy.setErrout(new PrintWriter(new StringWriter()));
//JTidy解析器要求一個(gè)InputStream,對(duì)于我的知識(shí)來說這里沒有直接的辦法將一個(gè)Reader轉(zhuǎn)換
//成一個(gè)InputStream。這個(gè)工作區(qū)代碼沒有字符編碼安全,但還可以混過。
BufferedReader br = new BufferedReader(inReader);
StringBuffer sb = new StringBuffer();
String line;
while((line = br.readLine()) != null)
{
sb.append(line);
sb.append("");
}
ByteArrayInputStream bais = new ByteArrayInputStream(sb.toString().getBytes("US-ASCII"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//作一個(gè)將HTML轉(zhuǎn)換well-formed HTML 的預(yù)備。
tidy.parse(bais, baos);
//整理一些遺漏的JTidy得到能被“true-blue”XML解析器解析的輸出。
FixEntities fe = new FixEntities(baos.toString());
return(fe.getFixedReader());
}
import com.sonalb.net.http.cookie.*;
...
public class HotmailChecker
{
public static void main(String args[]) throws Exception
{
if(args.length != 2)
{
usage();
System.exit(0);
}
String uname = args[0];
String pass = args[1];
HotmailChecker hmc = new HotmailChecker(uname,pass);
if(!hmc.doLogin())
{
System.out.println("Could not login to Hotmail.");
System.exit(0);
}
Vector newMessages = hmc.getNewMessages();
if(newMessages == null)
{
System.out.println("No NEW Messages.");
return;
}
System.out.println("You have " + newMessages.size() + " NEW Messages");
System.out.println("---------------------------------------------");
Iterator iter = newMessages.iterator();
//HMMessage封裝了一個(gè)Hotmail消息
HMMessage hm;
while(iter.hasNext())
{
hm = (HMMessage) iter.next();
System.out.println(" From: " + hm.getFrom());
System.out.println(" Subject: " + hm.getSubject());
System.out.println("Sent Date: " + hm.getSentDate());
System.out.println("---------------------------------------------");
}
}
static void usage()
{
System.out.println("Usage: java HotmailChecker ");
}
//實(shí)例變量和方法從這里開始
...
public HotmailChecker(String username, String passWord)
{
...
}
public boolean doLogin() throws Exception
{
...
}
public Vector getNewMessages() throws Exception
{
...
}
...
}
(出處:http://m.survivalescaperooms.com)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注