--- /dev/null
+package net.sourceforge.phpeclipse.wiki.actions.mediawiki;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.apache.commons.httpclient.ConnectMethod;
+import org.apache.commons.httpclient.HttpConnection;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpState;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.URI;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.protocol.Protocol;
+
+/**
+ * This class gets the wikitext from a wikipedia edit page
+ *
+ * The basic coding was copied from the commons-httpclient example <code>MediaWikiConnector.java</code>
+ */
+public class MediaWikiConnector {
+
+ /**
+ * Get the text of a wikimedia Wiki-Description from <code>en.wikipedia.org</code>
+ *
+ */
+ public static String getWikiText(String wikiDescriptor) {
+ return getWikiText(wikiDescriptor, null);
+ }
+
+ /**
+ * Get the text of a wikimedia Wiki-Description
+ *
+ */
+ public static String getWikiText(String wikiDescriptor, String urlStr) {
+ // examples
+ // http://en.wikipedia.org/w/wiki.phtml?title=Main_Page&action=edit
+ // http://en.wikibooks.org/w/wiki.phtml?title=Programming:PHP:SQL_Injection&action=edit
+ // http://en.wikipedia.org/w/wiki.phtml?title=Talk:Division_by_zero&action=edit
+ HttpMethod method = null;
+ try {
+ if (urlStr == null) {
+ urlStr = "http://en.wikipedia.org/w/wiki.phtml?title=" + wikiDescriptor + "&action=edit";
+ } else {
+ urlStr = urlStr + "?title=" + wikiDescriptor + "&action=edit";
+ }
+ URI uri = new URI(urlStr.toCharArray());
+
+ String schema = uri.getScheme();
+ if ((schema == null) || (schema.equals(""))) {
+ schema = "http";
+ }
+ Protocol protocol = Protocol.getProtocol(schema);
+
+ HttpState state = new HttpState();
+
+ method = new GetMethod(uri.toString());
+ String host = uri.getHost();
+ int port = uri.getPort();
+
+ HttpConnection connection = new HttpConnection(host, port, protocol);
+
+ connection.setProxyHost(System.getProperty("http.proxyHost"));
+ connection.setProxyPort(Integer.parseInt(System.getProperty("http.proxyPort", "80")));
+
+ if (System.getProperty("http.proxyUserName") != null) {
+ state.setProxyCredentials(null, null, new UsernamePasswordCredentials(System.getProperty("http.proxyUserName"), System
+ .getProperty("http.proxyPassword")));
+ }
+
+ if (connection.isProxied() && connection.isSecure()) {
+ method = new ConnectMethod(method);
+ }
+
+ method.execute(state, connection);
+
+ if (method.getStatusCode() == HttpStatus.SC_OK) {
+ // get the textareas wiki text now:
+ InputStream stream = method.getResponseBodyAsStream();
+ int byteLen = stream.available();
+ int count = 1;
+ byte[] buffer = new byte[byteLen];
+ stream.read(buffer, 0, byteLen);
+ String wikiText = new String(buffer);
+// String wikiText = method.getResponseBodyAsString();
+ int start = wikiText.indexOf("<textarea");
+ if (start != (-1)) {
+ start = wikiText.indexOf(">", start + 1);
+ if (start != (-1)) {
+ int end = wikiText.indexOf("</textarea>");
+ wikiText = wikiText.substring(start + 1, end);
+ }
+ }
+ return wikiText;
+ // System.out.println(wikiText);
+
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (method != null) {
+ method.releaseConnection();
+ }
+ }
+ return null; // no success in getting wiki text
+ }
+}
+