Monday, November 08, 2010 at 12:06 AM.

system.verbs.builtins.tcp.httpDeref

on httpDeref (url) {
	<<Changes
		<<5/30/08; 10:40:12 AM by DW
			<<Turn off messages, place the body in a try.
		<<5/30/08; 10:05:50 AM by DW
			<<Created for the NewsJunk project, probably useful in other contexts.
			<<Some sites use redirects in their feeds to allow them to monitor clicks, but I don't like flowing my users through them, so this script checks to see if its a redirect, and returns the page it points to.
	try {
		local (urllist = string.urlsplit (url));
		local (s = tcp.httpClient (server:urllist [2], path:urllist [3], ctFollowRedirects:0, flMessages:false));
		local (code = string.nthField (s, ' ', 2));
		if (code == 301) or (code == 302) or (code == 303) {
			local (t);
			string.httpResultSplit (s, @t);
			<<scratchpad.headers = t
			if defined (t.location) {
				return (t.location)}}};
	return (url)};
bundle { //test code
	local (url = "http://feeds.feedburner.com/~r/PoliticalWire/~3/301331700/warner_rated_more_favorably_than_gilmore_in_virginia.html");
	url = httpDeref (url);
	webbrowser.openurl (url);
	dialog.alert (httpDeref (url))}



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.