From 209e0f2fe842795b2b35382d44550147338bcdde Mon Sep 17 00:00:00 2001 From: reger Date: Sat, 4 Oct 2014 04:11:48 +0200 Subject: [PATCH] allow url parameter in worktable apicall allow url=wwwl?param=a¶m=b (with ?, & encoded) fix: http://mantis.tokeek.de/view.php?id=100 fix double adding of '&' in MultiProtocolURL.escape() --- htroot/Load_RSS_p.java | 3 ++- .../cora/document/id/MultiProtocolURL.java | 10 ++++--- source/net/yacy/data/WorkTables.java | 26 ++++++++++++------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/htroot/Load_RSS_p.java b/htroot/Load_RSS_p.java index c07dc5db0..5f04ca734 100644 --- a/htroot/Load_RSS_p.java +++ b/htroot/Load_RSS_p.java @@ -36,6 +36,7 @@ import net.yacy.cora.document.feed.RSSFeed; import net.yacy.cora.document.feed.RSSMessage; import net.yacy.cora.document.feed.RSSReader; import net.yacy.cora.document.id.DigestURL; +import net.yacy.cora.document.id.MultiProtocolURL; import net.yacy.cora.federate.yacy.CacheStrategy; import net.yacy.cora.protocol.ClientIdentification; import net.yacy.cora.protocol.RequestHeader; @@ -212,7 +213,7 @@ public class Load_RSS_p { final Date date_next_exec = r.get(WorkTables.TABLE_API_COL_DATE_NEXT_EXEC, (Date) null); prop.put("showscheduledfeeds_list_" + apic + "_pk", UTF8.String(row.getPK())); prop.put("showscheduledfeeds_list_" + apic + "_count", apic); - prop.putXML("showscheduledfeeds_list_" + apic + "_rss", messageurl); + prop.put("showscheduledfeeds_list_" + apic + "_rss", MultiProtocolURL.escape(messageurl).toString()); prop.putXML("showscheduledfeeds_list_" + apic + "_title", row.get("title", "")); prop.putXML("showscheduledfeeds_list_" + apic + "_referrer", referrer == null ? "#" : referrer.toNormalform(true)); prop.put("showscheduledfeeds_list_" + apic + "_recording", DateFormat.getDateTimeInstance().format(row.get("recording_date", new Date()))); diff --git a/source/net/yacy/cora/document/id/MultiProtocolURL.java b/source/net/yacy/cora/document/id/MultiProtocolURL.java index d1077d0ec..51c44e82f 100644 --- a/source/net/yacy/cora/document/id/MultiProtocolURL.java +++ b/source/net/yacy/cora/document/id/MultiProtocolURL.java @@ -66,8 +66,6 @@ import net.yacy.crawler.retrieval.Response; */ public class MultiProtocolURL implements Serializable, Comparable { - public static final MultiProtocolURL POISON = new MultiProtocolURL(); // poison pill for concurrent link generators - private static final long serialVersionUID = -1173233022912141884L; private static final long SMB_TIMEOUT = 5000; @@ -373,6 +371,11 @@ public class MultiProtocolURL implements Serializable, Comparable= 0 && host.charAt(0) != '[') host = '[' + host + ']'; // IPv6 host must be enclosed in square brackets @@ -521,9 +524,8 @@ public class MultiProtocolURL implements Serializable, Comparable l = new LinkedHashMap(); for (final String pk: pks) { row = null; @@ -234,20 +235,25 @@ public class WorkTables extends Tables { ConcurrentLog.logException(e); } if (row == null) continue; - url = "http://" + host + ":" + port + UTF8.String(row.get(WorkTables.TABLE_API_COL_URL)); - url += "&" + WorkTables.TABLE_API_COL_APICALL_PK + "=" + UTF8.String(row.getPK()); - ConcurrentLog.info("WorkTables", "executing url: " + url); + String theapicall = UTF8.String(row.get(WorkTables.TABLE_API_COL_URL)) + "&" + WorkTables.TABLE_API_COL_APICALL_PK + "=" + UTF8.String(row.getPK()); try { - client.GETbytes(url, username, pass, false); - l.put(url, client.getStatusCode()); - } catch (final IOException e) { - ConcurrentLog.logException(e); - l.put(url, -1); + // use 4 param MultiProtocolURL to allow api_row_url with searchpart (like url?p=a&p2=b ) in client.GETbytes() + MultiProtocolURL url = new MultiProtocolURL("http", host, port, theapicall); + ConcurrentLog.info("WorkTables", "executing url: " + url.toString()); + try { + client.GETbytes(url, username, pass, false); // use GETbytes(MultiProtocolURL,..) form to allow url in parameter (&url=path% + l.put(url.toString(), client.getStatusCode()); + } catch (final IOException e) { + ConcurrentLog.logException(e); + l.put(url.toString(), -1); + } + } catch (MalformedURLException ex) { + ConcurrentLog.warn("APICALL", "wrong url in apicall " + theapicall); } } return l; } - + public static int execAPICall(String host, int port, String path, byte[] pk, final String username, final String pass) { // now call the api URLs and store the result status final HTTPClient client = new HTTPClient(ClientIdentification.yacyInternetCrawlerAgent);