User:Wikibot
出自Ubuntu中文
机器人,自动将 http://help.ubuntu.com 和 http://wiki.ubuntu.com 由 monimoni 格式转换到 mediawiki 格式,并自动更新和发布的小程序。 由java写成。
/* * Main.java * * Created on 2007年5月12日, 下午1:31 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package wiki; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.security.GeneralSecurityException; import java.security.Security; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.X509TrustManager; /** * * @author oneleaf */ public class Main { List <String> addDict= new Vector<String>(); List <String> oldDict= new Vector<String>(); String cookie=getCookie(); private String getCookie(){ String cookie = ""; try{ URL httpurl = new URL("http://wiki.ubuntu.org.cn/index.php?title=Special:Userlogin"); HttpURLConnection httpConn = (HttpURLConnection)httpurl.openConnection(); httpConn.addRequestProperty("Cookie",cookie); httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)"); httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpConn.setRequestProperty("Connection", "Keep-Alive"); httpConn.setUseCaches(false); cookie=httpConn.getHeaderField("Set-Cookie"); String data="wpName=wikibot&wpPassword=********&wpRemember=1"; httpurl = new URL("http://wiki.ubuntu.org.cn/index.php?title=Special:Userlogin&action=submitlogin&type=login"); httpConn = (HttpURLConnection)httpurl.openConnection(); httpConn.setRequestMethod("POST"); httpConn.addRequestProperty("Cookie",cookie); httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)"); httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpConn.setRequestProperty("Content-Language","UTF-8" ); httpConn.setRequestProperty("Content-Length", ""+data.getBytes().length); httpConn.setRequestProperty("Connection", "Keep-Alive"); httpConn.setDoOutput(true); httpConn.setDoInput(true); httpConn.setUseCaches(false); DataOutputStream outStream = new DataOutputStream(httpConn.getOutputStream()); outStream.writeBytes(data); outStream.flush(); outStream.close(); List <String> list=httpConn.getHeaderFields().get("Set-Cookie"); for (int i=0;i<list.size();i++){ cookie=cookie+"; "+list.get(i); } } catch (Exception ex){ ex.printStackTrace(); } return cookie; } private void addDict(String dict){ String str=dict.trim(); if (dict.startsWith("/")){ str=dict.substring(1); }else if (dict.indexOf("#")>0){ str=dict.substring(0,dict.indexOf("#")); }else if (dict.indexOf("?")>0){ str=dict.substring(0,dict.indexOf("?")); }else if (dict.startsWith("./") || dict.startsWith("//")){ str=dict.substring(2); }else if (dict.startsWith("../")){ str=dict.substring(3); } if (str.toLowerCase().indexOf("team")>0) return; if (str.trim().length()==0) return; if (str.trim().length()>=256) return; //../CommandLine if (oldDict.contains(str)) return; if (addDict.contains(str)) return; addDict.add(str); } private void delDict(int dictindex){ oldDict.add(addDict.get(dictindex)); addDict.remove(dictindex); } private void clearDict(){ addDict.clear(); oldDict.clear(); } private void getDicts(String html){ Pattern pattern= Pattern.compile("\\[UbuntuHelp:(.*?)\\]"); Matcher matcher=pattern.matcher(html); while(matcher.find()) { String line=matcher.group(1); if (line.indexOf("|")>0){ addDict(line.substring(0,line.indexOf("|"))); }else{ addDict(line); } } pattern= Pattern.compile("\\[UbuntuWiki:(.*?)\\]"); matcher=pattern.matcher(html); while(matcher.find()) { String line=matcher.group(1); if (line.indexOf("|")>0){ addDict(line.substring(0,line.indexOf("|"))); }else{ addDict(line); } } } /** Creates a new instance of Main */ public Main() { SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("TLS"); X509TrustManager[] xtmArray = new X509TrustManager[] { xtm }; sslContext.init(null, xtmArray, new java.security.SecureRandom()); } catch(GeneralSecurityException gse) { } if(sslContext != null) { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); } HttpsURLConnection.setDefaultHostnameVerifier(hnv); } private X509TrustManager xtm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) {} public void checkServerTrusted(X509Certificate[] chain, String authType) {} public X509Certificate[] getAcceptedIssuers() { return null; } }; private HostnameVerifier hnv = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; public String getUrl(String urladdress,String dict) throws IOException{ URL url=new URL(urladdress); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setReadTimeout(60000); httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)"); httpConn.setRequestProperty("Content-Language","UTF-8" ); httpConn.setRequestProperty("Connection", "Keep-Alive"); InputStream in=httpConn.getInputStream(); BufferedReader read=new BufferedReader(new InputStreamReader(in)); StringBuffer sb=new StringBuffer(); while (true){ String line=read.readLine(); if (line==null) break; sb.append(line+"\r\n"); } return moin2wm(sb.toString(),urladdress,dict); } public String moin2wm(String html,String url,String dict) throws UnsupportedEncodingException{ String text=html; String ex="UbuntuHelp"; String turl="https://help.ubuntu.com/community/"; if (url.startsWith("https://wiki")){ ex="UbuntuWiki"; turl="https://wiki.ubuntu.com/"; } String head="{{From|"+url.substring(0,url.indexOf("?"))+"}}\r\n{{Languages|"+ex+":"+dict+"}}\r\n"; //删除注释 text=text.replaceAll("\r\n##(.*)",""); text=text.replaceAll("\r\n#format(.*)",""); text=text.replaceAll("\r\n#language(.*)",""); text=text.replaceAll("\r\n#pragma(.*)",""); text=text.replaceAll("\r\n#acl(.*)",""); text=text.replaceAll("^##(.*)\r\n",""); text=text.replaceAll("^#format(.*)\r\n",""); text=text.replaceAll("^#language(.*)\r\n",""); text=text.replaceAll("^#pragma(.*)\r\n",""); text=text.replaceAll("^#acl(.*)\r\n",""); //替换#REDIRECT PDFPrinting => #REDIRECT [[PDFPrinting]] text=text.replaceAll("#REDIRECT (\\S*)","#REDIRECT "+"[["+ex+":$1]]"); text=text.replaceAll("#redirect (\\S*)","#REDIRECT "+"[["+ex+":$1]]"); //#refresh 0 https://wiki.ubuntu.com/ASUS_A3H_5010_Laptop_with_Ubuntu text=text.replaceAll("#REFRESH (.*?) (\\S*)","#REDIRECT "+"[["+ex+":$2]]"); text=text.replaceAll("#refresh (.*?) (\\S*)","#REDIRECT "+"[["+ex+":$2]]"); //删除主题 text=text.replaceAll(".*TableOfContents.*",""); //标题从二开始 text=text.replaceAll("= (.*?) =","== $1 =="); //转化List text=replaceList2(text); //[[BR]] -> <BR> text=text.replaceAll("\\[\\[BR\\]\\]","<br>"); //link convert superscripted - ^ * ^ -> <sup> * </sup> text=text.replaceAll("\\^(.*)\\^","<sup>$1</sup>"); //link convert subscripted - ,, * ,, -> <sub> * </sub> text=text.replaceAll(",,(.*?),,","<sub>$1</sub>"); //link convert - ["/*"] -> [[ex:dict/*]] text=text.replaceAll("\\[//(.*?)\"\\]","[["+ex+":"+dict+"/$1]]"); text=text.replaceAll("\\[/(.*?)\"\\]","[["+ex+":"+dict+"/$1]]"); //link convert - [" * "] -> [[ UbuntuHelp: * ]] text=text.replaceAll("\\[\"(.*?)\"\\]","[["+ex+":$1]]"); //link convert - [# * ] -> [[ * ]] text=text.replaceAll("\\[#(.*?)\\]","[[$1]]"); //link convert - [: / * : * ] -> [[ UbuntuHelp:dict\ * | * ]] text=text.replaceAll("\\[:/(.*?):(.*?)\\]","[["+ex+":"+dict+"/$1|$2]]"); //link convert - [: * : * ] -> [[ UbuntuHelp: * | * ]] text=text.replaceAll("\\[:(.*?):(.*?)\\]","[["+ex+":$1|$2]]"); //link convert - [: / * ] -> [[ UbuntuHelp: dict * ]] text=text.replaceAll("\\[:/(.*?)\\]","[["+ex+":"+dict+"/$1]]"); //link convert - [: * ] -> [[ UbuntuHelp: * ]] text=text.replaceAll("\\[:(.*?)\\]","[["+ex+":$1]]"); //link convert - wiki:cat -> [[UbuntuWiki:cat]] text=text.replaceAll(" wiki:(\\S*)"," [[UbuntuWiki:$1]]"); text=text.replaceAll("\r\nwiki:(\\S*)","\r\n[[UbuntuWiki:$1]]"); //link convert - [wiki:cat * ] -> [[UbuntuWiki:cat| * ]] text=text.replaceAll("\\[wiki:(.*?)\\ (.*?)\\]","[[UbuntuWiki:$1|$2]]"); //link convert - [wiki:cat * ] -> [[UbuntuWiki:cat| * ]] text=text.replaceAll("\\[wiki:(.*?)\\]","[[UbuntuWiki:$1]]"); //link convert - [UbuntuWiki:\*] -> [UbuntuWiki:dict\*] text=text.replaceAll("\\[UbuntuWiki:\\\\(.*?)\\]","[UbuntuWiki:"+dict+"\\$1]"); //link convert - [UbuntuHelp:\*] -> [UbuntuHelp:dict\*] text=text.replaceAll("\\[UbuntuHelp:\\\\(.*?)\\]","[UbuntuHelp:"+dict+"\\$1]"); //link convert - __ * __ -> <u> * </u> text=text.replaceAll("__(.*?)__","<u>$1</u>"); //link convert - {{{ * }}} -> <code><nowiki> * </nowiki></code> text=text.replaceAll("\\{\\{\\{(.*?)\\}\\}\\}","<code><nowiki>$1</nowiki></code>"); //link convert - \r\n {{{ * -> \r\n<pre><nowiki> * text=text.replaceAll("\r\n([ \\.]*?)\\{\\{\\{(.*)","\r\n<pre><nowiki>$2"); //link convert - {{{ * -> <pre><nowiki> * text=text.replaceAll("\\{\\{\\{(.*)","\r\n<pre><nowiki>$1"); //link convert - * }}} -> * <\pre><\nowiki> text=text.replaceAll("(.*?)\\}\\}\\}","$1</nowiki></pre>"); //CategoryHomepage =>[[category:"+ex+"]]; text=text.replaceAll("Category(\\S*)","[[category:Category$1]]"); text=text.replaceAll("\r\n( *)","\r\n"); text=replaceUrl(text,turl,dict); text=tableConv(text); //[[xxx:http]] => [[http:]] text=text.replaceAll("\\[\\[(.*?):http(.*?)\\]\\]","[[http$2]]"); //[[xxx:ftp]] => [[ftp:]] text=text.replaceAll("\\[\\[(.*?):ftp(.*?)\\]\\]","[[ftp$2]]"); //[[https://wiki.ubuntu.com/*]] => [[UbuntuWiki:]] text=text.replaceAll("\\[\\[https://wiki\\.ubuntu\\.com/(.*?)\\]\\]","[[UbuntuWiki:$1]]"); //[[https://help.ubuntu.com/community/*]] => [[UbuntuHelp:]] text=text.replaceAll("\\[\\[https://help\\.ubuntu\\.com/community/(.*?)\\]\\]","[[UbuntuHelp:$1]]"); //[[http://wiki.ubuntu.com/*]] => [[UbuntuWiki:]] text=text.replaceAll("\\[\\[http://wiki\\.ubuntu\\.com/(.*?)\\]\\]","[[UbuntuWiki:$1]]"); //[[http://help.ubuntu.com/community/*]] => [[UbuntuHelp:]] text=text.replaceAll("\\[\\[http://help\\.ubuntu\\.com/community/(.*?)\\]\\]","[[UbuntuHelp:$1]]"); String foot="\r\n[[category:"+ex+"]]"; if (text.trim().startsWith("#REDIRECT")){ System.out.print(" "+text.trim()); Pattern pattern= Pattern.compile("\\[\\["+ex+":(.*?)\\]\\]"); Matcher matcher=pattern.matcher(text); if (matcher.find()){ //如果仅仅是大小写的重定向,就不用考虑直接忽略。 if (matcher.group(1).toLowerCase().equals(dict.toLowerCase())){ System.out.println("\r\n"+dict+" redirect to "+matcher.group(1)+" , 忽略. "); return ""; } } return text+head+foot; } if (text.trim().length()<10){ return ""; } return head+text+foot; } public String replaceList2(String text){ String[] lines=text.split("\r\n"); String block = ""; StringBuffer bf= new StringBuffer(); boolean start=false; for (int i=0;i<lines.length;i++){ String line=lines[i]; String linetrim=line.trim(); if (linetrim.equals("")) continue; if (linetrim.startsWith(". ")||linetrim.startsWith("* ")||linetrim.startsWith("1. ") ||linetrim.startsWith("a. ")||linetrim.startsWith("A. ")||linetrim.startsWith("i. ") ||linetrim.startsWith("I. ")){ if (! start){ start=true; block=line; }else{ block=block+"\r\n"+line; } }else{ if (start){ block=formatList(block); bf.append(block); start=false; } bf.append(lines[i]+"\r\n"); } } if (start){ block=formatList(block); bf.append(block); start=false; } return bf.toString(); } public String formatList(String text){ /* 1. one 1. two 1. one * bullet 1 * bullet 2 1. two 1. three * bullet 1. one */ //获得步进长度 text=text.replaceAll(" 1\\. "," # "); text=text.replaceAll(" a\\. "," # "); text=text.replaceAll(" A\\. "," # "); text=text.replaceAll(" i\\. "," # "); text=text.replaceAll(" I\\. "," # "); text=text.replaceAll(" \\. "," # "); String step=""; for (int i=0;i<text.length();i++){ if (text.charAt(i)==' '){ step=step+" "; }else break; } //修改步长为" " if (step.length()>0) text=text.replaceAll(step," "); String[] lines=text.split("\r\n"); for (int i=0;i<lines.length;i++){ if (lines[i].charAt(0)!=' ')break; lines[i]=lines[i].substring(1); } StringBuffer bf= new StringBuffer(); bf.append(lines[0]+"\r\n"); for (int i=1;i<lines.length;i++){ if (lines[i].startsWith(" ")){ char[] s=lines[i].toCharArray(); for (int j=0;j<s.length;j++){ if (s[j]==' '){ if (j>=lines[i-1].length()){ s[j]=0; }if (lines[i-1].charAt(j)!='*' && lines[i-1].charAt(j)!='#'){ s[j]=0; }else{ s[j]=lines[i-1].charAt(j); } }else break; } String l=""; for (int j=0;j<s.length;j++){ if (s[j]==0)continue; l=l+s[j]; } lines[i]=l; } bf.append(lines[i]+"\r\n"); } return bf.toString(); } public String replaceList(String text){ text=text.replaceAll("\r\n \\. (.*?)","\r\n* $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n*** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n**** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n***** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n****** $1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n*$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n**$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n***$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n****$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n*****$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n******$1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n#: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n##: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n###: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n####: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n#####: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n######: $1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n#$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n##$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n###$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n####$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n#####$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n######$1"); for (int i=1;i<20;i++){ // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n#$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n##$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n###$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n####$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n#####$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n######$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n*$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n**$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n***$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n****$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n*****$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n******$1"); } return text; } public String replaceUrl(String text,String baseurl,String dict) throws UnsupportedEncodingException{ //attachment:IconsPage/info.png -> https://help.ubuntu.com/community/IconsPage?action=AttachFile&do=get&target=info.png while (true){ Pattern pattern= Pattern.compile("attachment:(.*?)/(\\S*)"); Matcher matcher=pattern.matcher(text); String replace; if (matcher.find()) { replace=baseurl+matcher.group(1)+"?action=AttachFile&do=get&target="+URLEncoder.encode(matcher.group(2), "UTF-8"); text=text.substring(0,matcher.start(0))+replace+text.substring(matcher.end(0)); continue; } pattern= Pattern.compile("attachment:(\\S*)"); matcher=pattern.matcher(text); if(matcher.find()) { replace=baseurl+dict+"?action=AttachFile&do=get&target="+URLEncoder.encode(matcher.group(1), "UTF-8"); text=text.substring(0,matcher.start(0))+replace+text.substring(matcher.end(0)); continue; } break; } return text; } public String tableConv(String html){ //||a||b||c|| -> {| //||d||e||f|| |a||b||c // |- // |d||e||f // |} String[] lines=html.split("\r\n"); String block = ""; StringBuffer bf= new StringBuffer(); boolean start=false; for (int i=0;i<lines.length;i++){ String line=lines[i].trim(); if (line.startsWith("||")){ if (! start){ start=true; String str=line.substring(1,line.length()-2); str=str.replaceAll("<bgcolor.*?>",""); str=str.replaceAll("<style.*?>",""); str=str.replaceAll("<rowbgcolor.*?>",""); str=str.replaceAll("<tablestyle.*?>",""); block="{|border=\"1\" cellspacing=\"0\"\r\n"+str; }else{ String str=line.substring(1,line.length()-2); str=str.replaceAll("<bgcolor.*?>",""); str=str.replaceAll("<style.*?>",""); str=str.replaceAll("<rowbgcolor.*?>",""); block=block+"\r\n|-\r\n"+str; } }else{ if (start){ block=block+"\r\n|}\r\n"; bf.append(block); start=false; } bf.append(lines[i]+"\r\n"); } } if (start){ block=block+"\r\n|}\r\n"; bf.append(block); start=false; } return bf.toString(); } public void putText(String dict,String html,String surl) throws MalformedURLException, IOException{ URL url; URLConnection conn; InputStream in; BufferedReader read; StringBuffer sb; if (html.length()<5){ System.out.print(" is short:"+html); return; } // if (html.length()<300){ // if (html.toUpperCase().trim().indexOf("REFRESH")>0) { // System.out.println(dict+" is REFRESH."); // return; // } // if (html.toUpperCase().trim().indexOf("REDIRECT")>0) { // System.out.println(dict+" is REDIRECT."); // return; // } // } String ex="UbuntuHelp"; if (surl.startsWith("https://wiki")){ ex="UbuntuWiki"; } try{ url=new URL("http://wiki.ubuntu.org.cn/"+ex+":"+dict+"?action=raw"); conn = url.openConnection(); conn.setReadTimeout(60000); conn.setRequestProperty("Cookie", cookie); in=conn.getInputStream(); read=new BufferedReader(new InputStreamReader(in)); sb=new StringBuffer(); while (true){ String line=read.readLine(); if (line==null) break; sb.append(line+"\r\n"); } if (sb.toString().trim().length()==html.trim().length()) { System.out.print(" no changes"); return; } }catch(Exception ex0){ //nothing } url=new URL("http://wiki.ubuntu.org.cn/"+ex+":"+dict+"?action=edit"); conn = url.openConnection(); conn.setReadTimeout(60000); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Cookie", cookie); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)"); conn.setRequestProperty("Accept","text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"); in=conn.getInputStream(); read=new BufferedReader(new InputStreamReader(in)); sb=new StringBuffer(); while (true){ String line=read.readLine(); if (line==null) break; sb.append(line+"\r\n"); } int start=sb.indexOf("<form id=\"editform\""); int end=sb.indexOf("<div class=\"printfooter\">"); String from; try{ from=sb.substring(start,end); }catch(Exception ex0){ System.out.println(dict+" error,please set cookie!"); System.out.println(sb); return; } Map<String,String> map=getPostDate(from); Iterator<String> iterator=map.keySet().iterator(); url = new URL("http://wiki.ubuntu.org.cn/index.php?title="+ex+":"+URLEncoder.encode(dict, "UTF-8")+"&action=submit"); HttpURLConnection conn2 = (HttpURLConnection) url.openConnection(); String boundary="---------------------------167593640336579986891120154"; conn2.setReadTimeout(60000); conn2.setDoOutput(true); conn2.setAllowUserInteraction(false); conn2.setRequestMethod("POST"); conn2.setRequestProperty("Cookie", cookie); conn2.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary); conn2.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)"); conn2.setRequestProperty("Accept","text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"); conn2.setRequestProperty("Accept-Language", "zh-cn,zh;q=0.5"); conn2.setRequestProperty("Referer", "http://wiki.ubuntu.org.cn/index.php?title=UbuntuHelp:"+URLEncoder.encode(dict, "UTF-8")+"&action=edit"); conn2.setRequestProperty("Accept-Charset", "UTF-8,*"); conn2.setRequestProperty("Connection", "Keep-Alive"); StringBuffer content=new StringBuffer(); while (iterator.hasNext()){ String name=iterator.next(); if (name.equals("wpPreview")) continue; if (name.equals("wpDiff")) continue; if (name.equals("wpWatchthis")) continue; String value=""; if (name.equals("wpTextbox1")){ value=html; }else { value=map.get(name); } content.append("--"+boundary+"\r\n"); content.append("Content-Disposition: form-data; name=\""+name+"\"\r\n\r\n"); content.append(value+"\r\n"); } content.append("--"+boundary+"--\r\n\r\n"); byte[] data=content.toString().getBytes(); conn2.setRequestProperty("Content-Length", String.valueOf(data.length)); OutputStream out = conn2.getOutputStream(); out.write(data); out.flush(); // Get the response try{ BufferedReader rd = new BufferedReader(new<