<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WebProNews &#187; Proxy</title>
	<atom:link href="http://www.webpronews.com/tag/proxy/feed" rel="self" type="application/rss+xml" />
	<link>http://www.webpronews.com</link>
	<description>Breaking News in Tech, Search, Social, &#38; Business</description>
	<lastBuildDate>Sun, 12 Feb 2012 17:01:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SES San Jose Opens Today</title>
		<link>http://www.webpronews.com/ses-san-jose-opens-today-2007-08</link>
		<comments>http://www.webpronews.com/ses-san-jose-opens-today-2007-08#comments</comments>
		<pubDate>Mon, 20 Aug 2007 12:17:21 +0000</pubDate>
		<dc:creator>WebProNews Staff</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[Ask]]></category>
		<category><![CDATA[Click]]></category>
		<category><![CDATA[Fraud]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Search Engine]]></category>
		<category><![CDATA[SES]]></category>
		<category><![CDATA[SES San Jose]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=39848</guid>
		<description><![CDATA[<p>Four days of the search industry's biggest gathering starts in San Jose, where attendees can learn the finer points about marketing effectively and ranking well with the drivers of search-related traffic.</p>
]]></description>
			<content:encoded><![CDATA[<p>Four days of the search industry&#8217;s biggest gathering starts in San Jose, where attendees can learn the finer points about marketing effectively and ranking well with the drivers of search-related traffic.</p>
<p><span id="more-39848"></span> <!--sessj07--></p>
<table cellspacing="0" cellpadding="2" width="400" border="0">
<tr>
<td align="center"><img width="400" border="0" height="200" src="http://images.ientrymail.com/webpronews/article_pics/ses_san_jose_opens_today.jpg" title="SES San Jose Opens Today" alt="SES San Jose Opens Today"></td>
</tr>
<tr>
<td class="caption" style="padding-right: 45px; padding-left: 45px; padding-bottom: 10px" align="right">SES San Jose Opens Today</td>
</tr>
<tr>
<td class="caption" style="padding-bottom: 0px" align="center"><img height="21" alt="" width="334" src="http://images.ientrymail.com/webpronews/salon/complete.gif"></td>
</tr>
</table>
<p>We would be remiss if we didn&#8217;t mention the WebProNews contingent making the rounds of the convention. Our video staff has their cameras and mikes at the ready. As long as no one messes with managing editor Mike McDonald&#8217;s coffee, he&#8217;ll be there too.</p>
<p>The run-up to this edition of <a href="http://www.searchenginestrategies.com/sew/sj07/index.html" target="_blank">SES San Jose</a> proved less dramatic than last year. Ahead of the conference, AOL Research placed thousands of search records online, creating a field day for all kinds of interested observers and lots to talk about through and beyond the conference.</p>
<p>The pre-conference issues this year are a little more understated, but just as interesting. Last week, Dan Thies published an overview of <a href="http://www.webpronews.com/topnews/2007/08/16/google-search-results-you-are-at-risk">hacking Google by proxy</a>. Such an attack could knock one&#8217;s site right out of the search rankings, which would be devastating to a site&#8217;s traffic.</p>
<p><a href="http://www.webpronews.com/topnews/2007/08/17/ses-san-jose-separates-click-fraud-discussions">Click fraud</a> discussions at SES San Jose previously put search engine representatives on the dais with third-party click analysis companies for some interesting and <a href="http://www.webpronews.com/topnews/2006/08/08/ses-fiery-click-fraud-session">sometimes combative</a> dialogue.</p>
<p>Those two sides have been separated into a pair of consecutive sessions this year, taking place on day two. We have to hope the third-party folks will stop by the search engine&#8217;s click fraud session and lob some verbal brickbats from the audience.</p>
<p>Co-chairs Danny Sullivan and Chris Sherman have put together a compelling slate of presentations for SES San Jose 2007, and we&#8217;re looking forward to covering them. Stop by WebProNews through the week to catch some exclusive videos and other reports from the conference.</p>
<p><small></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/ses-san-jose-opens-today-2007-08/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Search Results: Your SERPs At Risk</title>
		<link>http://www.webpronews.com/google-search-results-you-are-at-risk-2007-08</link>
		<comments>http://www.webpronews.com/google-search-results-you-are-at-risk-2007-08#comments</comments>
		<pubDate>Thu, 16 Aug 2007 22:22:23 +0000</pubDate>
		<dc:creator>WebProNews Staff</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Reverse Cloaking]]></category>
		<category><![CDATA[Search Engine]]></category>
		<category><![CDATA[SERPs]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=39817</guid>
		<description><![CDATA[<p>Third parties could hack someone's place in Google's SERPs right out of the index with some malicious proxy work.</p>
]]></description>
			<content:encoded><![CDATA[<p>Third parties could hack someone&#8217;s place in Google&#8217;s SERPs right out of the index with some malicious proxy work.</p>
<p><span id="more-39817"></span><br />
<table width="400" cellspacing="0" cellpadding="2" border="0">
<tr>
<td align="center"><img width="400" height="200" border="0" class="irImage" alt="Google Search Results: Your SERPs At Risk" title="Google Search Results: Your SERPs At Risk" src="http://images.ientrymail.com/webpronews/article_pics/googlesearchresults.jpg"/></td>
</tr>
<tr>
<td align="right" class="caption" style="padding-bottom: 10px; padding-left: 45px; padding-right: 45px;">Google Search Results: Your SERPs At Risk</td>
</tr>
<tr>
<td align="center" class="caption" style="padding-bottom: 0px;"><img width="334" height="21" src="http://images.ientrymail.com/webpronews/salon/complete.gif"/></td>
</tr>
</table>
<p></p>
<p>A few short days before the biggest search conference of the year, SES San Jose, we&#8217;ve learned of a story that should have people talking next week. Dan Thies claimed he has been sitting on an explosive story of <a href="http://www.seofaststart.com/blog/google-proxy-hacking">Google proxy hacking</a> for a year, and has just posted about it on his SEO Fast Start blog.</p>
<p>&quot;Danny Sullivan has known nearly as long, and I suspect that his behind the scenes efforts are the reason why the major search engines all decided to publish &quot;how to validate our spider&quot; instructions after SES San Jose last year,&quot; Thies said.</p>
<p>A SEO client, Brad Fallon, with a site that Google indexed all of save the home page, set Thies looking for the reason why that page wasn&#8217;t making it into the SERPs. The client&#8217;s page had been fetched by Googlebot through a proxy, creating a duplicate content situation.</p>
<p>Thies&#8217; client&#8217;s home page was being dropped by Google. Through further investigation, Theis discovered, &quot;Someone was actively seeking out proxies and linking to them, so that Google would pick them up, and drop Brad&#8217;s home page.&quot; Fallon&#8217;s site had not been banned by Google.</p>
<p>To alleviate the problem, Thies opted to do the same thing bookmarking site Delicious does: reverse cloaking:</p>
<blockquote><p><em>Every page Brad&#8217;s web servers deliver now has &quot;noindex, nofollow&quot; in the robots meta tag, unless the request comes from a validated search engine spider.  A &quot;spoofed&quot; proxy visit from Googlebot delivers a page that won&#8217;t be indexed. A real visit from Googlebot gets the page with &quot;noindex&quot; removed.</em></p></blockquote>
<p>The problem has been existent for more than a year, and Thies felt it was time to talk more about this issue publicly. We&#8217;re betting lots of people will do just that.</p>
<p><small></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/google-search-results-you-are-at-risk-2007-08/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Would You Trust Business Domains Registered via Proxy?</title>
		<link>http://www.webpronews.com/would-you-trust-business-domains-registered-via-proxy-2007-07</link>
		<comments>http://www.webpronews.com/would-you-trust-business-domains-registered-via-proxy-2007-07#comments</comments>
		<pubDate>Mon, 16 Jul 2007 14:01:38 +0000</pubDate>
		<dc:creator>Aaron Wall</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[Domains]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[trust]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=39151</guid>
		<description><![CDATA[<div class="entry">Someone recently left a comment on my blog promoting a new keyword research tool that is registered via proxy. The competitive analysis keyword research tool has been marketed heavily <a href="http://search.yahoo.com/search?p=linkdomain%3Akeywordspy.com+%22can+also+give+keywordspy%22" title="comment spam">via comment spam</a>, and currently shows itself as bidding on 0 keywords, per its own competitive measures. The site gives no data about who owns it. Could it appear any less legitimate?]]></description>
			<content:encoded><![CDATA[<div class="entry">Someone recently left a comment on my blog promoting a new keyword research tool that is registered via proxy. The competitive analysis keyword research tool has been marketed heavily <a href="http://search.yahoo.com/search?p=linkdomain%3Akeywordspy.com+%22can+also+give+keywordspy%22" title="comment spam">via comment spam</a>, and currently shows itself as bidding on 0 keywords, per its own competitive measures. The site gives no data about who owns it. Could it appear any less legitimate?</p>
<p>How do marketers create market research tools espousing the value of something they are not doing themselves, then market it via blog comment spam? It isn&#8217;t hard to send an email or buy a review. If their service is worth $90 a month (their current price) their marketing budget should include some money for paid search and public relations. They could at least have a blog comparing seasonal data and data from different companies the way Hitwise does.</p>
<p>The easiest way to show the value of your offering is to eat your own dog food. That is why ReviewMe bought a bunch of its own ads to help the site go viral at launch. There are so many ways to market ad networks or competitive research tools that there is no point creating one if the marketing strategy starts with the likes of blog comment spam and/or cold calling.</p>
<p><a href="http://www.seobook.com/archives/002349.shtml#start_comments" title="Comment on domains registered via proxy">Comments</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/would-you-trust-business-domains-registered-via-proxy-2007-07/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matt Cutts Teaches Us To Crawl</title>
		<link>http://www.webpronews.com/matt-cutts-teaches-us-to-crawl-2006-04</link>
		<comments>http://www.webpronews.com/matt-cutts-teaches-us-to-crawl-2006-04#comments</comments>
		<pubDate>Mon, 24 Apr 2006 17:07:45 +0000</pubDate>
		<dc:creator>WebProNews Staff</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[Bigdaddy]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Matt Cutts]]></category>
		<category><![CDATA[Proxy]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=28737</guid>
		<description><![CDATA[The Google engineer followed up his WebmasterWorld PubCon Boston discussion of Google's Bigdaddy infrastructure update and "crawl cache" with a lengthier look at the topic.
]]></description>
			<content:encoded><![CDATA[<p>The Google engineer followed up his WebmasterWorld PubCon Boston discussion of Google&#8217;s Bigdaddy infrastructure update and &#8220;crawl cache&#8221; with a lengthier look at the topic.</p>
<table width="400" border="0" cellpadding="2" cellspacing="0">
<tr>
<td align="center"><img src="http://images.ientrymail.com/webpronews/042406CuttsCrawl.jpg" alt="Matt Cutts Teaches Us To Crawl" width="400" height="200" border="0" class="irImage" title="Matt Cutts Teaches Us To Crawl"></td>
</tr>
<tr>
<td align="right" class="caption" style="padding-bottom: 10px; padding-left: 45px; padding-right: 45px;">Matt Cutts Discusses Cache Crawling</td>
</tr>
<tr>
<td align="center" class="caption" style="padding-bottom: 0px;"><img src="http://images.ientrymail.com/webpronews/salon/complete.gif" width="334" height="21"></td>
</tr>
</table>
<p>Cutts&#8217; latest <a href=http://www.mattcutts.com/blog/crawl-caching-proxy/ class=bluelink>blog post</a> reviewed Bigdaddy&#8217;s crawl-caching proxy in greater depth. He even provided helpful charts to illustrate the process.</p>
<p>As a webmaster, one may see numerous fetches from multiple Googlebots, each of them using some bandwidth while accomplishing their appointed rounds. It makes for a more accurate Google index, but the site impact has given some webmasters fits over the bandwidth usage.</p>
<p>The proxy used in the Bigdaddy infrastructure works like other proxies. It handles the effort of retrieving pages from websites, and fulfills requests from the various Google crawlers. Instead of multiple spiders hitting a website, they hit the cache instead.</p>
<p>Cutts breaks down the crawl caching in a summary during his post (spacing added; we like Matt, but we&#8217;d really like him to enjoy the Return key a bit more often <img src='http://www.webpronews.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  :</p>
<p><i>
<div style=margin-left:10px; margin-right:10px;>So the crawl caching proxy work like this: if service X fetches a page, and then later service Y would have fetched the exact same page, Google will sometimes use the page from the caching proxy. </p>
<p>Joining service X (AdSense, blogsearch, News crawl, any Google service that uses a bot) doesn&#8217;t queue up pages to be include in our main web index. Also, note that robots.txt rules still apply to each crawl service appropriately. If service X was allowed to fetch a page, but a robots.txt file prevents service Y from fetching the page, service Y wouldn&#8217;t get the page from the caching proxy. </p>
<p>Finally, note that the crawl caching proxy is not the same thing as the cached page that you see when clicking on the &#8220;Cached&#8221; link by web results. Those cached pages are only updated when a new page is added to our index. </p>
<p>It&#8217;s more accurate to think of the crawl caching proxy as a system that sits outside of webcrawl, and which can sometimes return pages without putting extra load on external sites.</p></div>
<p></i><br />
The essential goal of the proxy, to reduce bandwidth, seems to have worked to Google&#8217;s satisfaction. Cutts wrote that &#8220;it was working so smoothly that I didn&#8217;t know it was live.&#8221;</p>
<p>&#8212;</p>
<p>Add to <script language='javascript'> document.write("<a href='http://del.icio.us/post?url="+encodeURIComponent(document.location.href)+"&#038;title="+encodeURIComponent(document.title)+"'>Del.icio.us</a>")</script> | <a href="javascript:void window.open('http://digg.com/submit?phase=2&#038;url='+encodeURIComponent(window.location.href)+'&#038;ei=UTF-8','popup','width=520px,height=420px,status=0,location=0,resizable=1,scrollbars=1,left=100,top=50',0)">DiggThis</a>  | <a href="javascript:void window.open('http://myweb2.search.yahoo.com/myresults/bookmarklet?t='+encodeURIComponent(document.title)+'&#038;u='+encodeURIComponent(window.location.href)+'&#038;tag=Matt Cutts,Bigdaddy,Google','popup','width=520px,height=420px,status=0,location=0,resizable=1,scrollbars=1,left=100,top=50',0)">Yahoo! My Web</a> | <a href="javascript:void window.open('http://www.prefound.com/group_finds.php?cmd_url='+encodeURIComponent(window.location.href)+'&#038;cmd_title='+encodeURIComponent(document.title),'popup','width=800px,height=500px,status=0,location=0,resizable=1,scrollbars=1,left=100,top=50',0)">PreFound.com</a></p>
<p>Bookmark WebProNews: <a href=http://www.webpronews.com><img src=http://images.ientrymail.com/webpronews/wpn-readit.jpg border=0></a> </p>
<p><script language=JavaScript src="http://aj.600z.com/aj/1095/0/vj?z=1&#038;dim=1088&#038;pos=15"></script></p>
<p>David Utter is a staff writer for WebProNews covering technology and business. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/matt-cutts-teaches-us-to-crawl-2006-04/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ford Files 2005 Proxy Statement</title>
		<link>http://www.webpronews.com/ford-files-proxy-statement-2005-04</link>
		<comments>http://www.webpronews.com/ford-files-proxy-statement-2005-04#comments</comments>
		<pubDate>Wed, 06 Apr 2005 19:59:45 +0000</pubDate>
		<dc:creator>WebProNews</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Ford]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Stock]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=16573</guid>
		<description><![CDATA[Ford Motor Company  filed its 2005 proxy statement with the Securities and Exchange Commission.
]]></description>
			<content:encoded><![CDATA[<p>Ford Motor Company  filed its 2005 proxy statement with the Securities and Exchange Commission.</p>
<p>The statement outlines compensation for select executives, including William Clay Ford, Jr., chairman and chief executive officer.</p>
<p>Compensation of Ford executives for 2004 generally consisted of salary, stock-based awards and bonuses.</p>
<p>Compensation details found in the 2005 proxy statement include:</p>
<p>William Clay Ford, Jr., chairman and CEO, received no cash salary in 2004. In lieu of a cash salary equivalent to $1.5 million, he was awarded 103,882 shares of restricted common stock, tying his compensation to the long- term performance of the Company. He was awarded a 2004 bonus in the form of 841,008 shares of restricted common stock and restricted stock equivalents with a fair market value of approximately $10.5 million at the time of grant. In lieu of other long-term compensation, he also received a stock option grant covering 1,587,301 shares. These options have a strike price of $16.49 and vest over a three year period. Mr. Ford also exercised stock options covering 1,410,404 shares, realizing a value of $5.3 million, at the same time retaining the acquired shares. In addition, he received other compensation totaling $266,000.</p>
<p>For the second year, Mr. Ford committed a portion of his bonus of restricted stock equivalents to the William Clay Ford, Jr. Scholarship Program, providing tuition assistance for children of Ford employees, and a remaining portion to Detroit charities.</p>
<p>Jim Padilla, president and chief operating officer, earned $966,667 in salary and $2,034,910 in bonus, which consisted of $1.18 million in cash and a grant of 69,000 shares of unrestricted common stock worth $854,910, as well as $314,131 in other compensation. He also was awarded options to purchase 100,000 shares of common stock in long-term compensation. In addition, for his performance in 2004, Mr. Padilla was awarded a bonus in the form of 246,696 shares of restricted common stock and received 50,000 restricted stock equivalents as a long-term incentive grant, and for his promotion to Chief Operating Officer. Combined, these shares and stock equivalents have a fair market value of approximately $3,761,000 at the time of grant. Mr. Padilla also received a Long Term Incentive Plan award of $173,460 which was paid in unrestricted common stock for the 2002-2004 performance period. He also exercised option grants covering 82,499 shares with a realized value of $686,000, at the same time retaining 29,849 of those shares.</p>
<p>Greg Smith, executive vice president and president, The Americas, earned $756,667 in salary and $1,120,970 in bonus, which consisted of a cash award of $836,000 and a grant of 23,000 shares of unrestricted common stock worth $284,970, in addition to other compensation totaling $48,227. Mr. Smith also was awarded options to purchase 50,000 shares of common stock as a form of long-term compensation. He also received a Long Term Incentive Plan award of $105,315 which was paid in unrestricted common stock for the 2002-2004 performance period.</p>
<p>Nicholas Scheele, former president and chief operating officer, earned $1,000,000 in salary and $1,514,530 in bonus, which consisted of a cash award of $1,180,000 and a grant of 27,000 shares of unrestricted common stock worth $334,530, in addition to other compensation totaling $397,985. He also was awarded options to purchase 81,168 shares of common stock in long-term compensation. He also received a Long Term Incentive Plan award of $929,250 which was paid in unrestricted common stock for the 2002-2004 performance period.</p>
<p>Allan Gilmour, former vice chairman, earned $1,050,000 in salary and $1,517,880 in bonus, which consisted of a cash award of $997,500 and a grant of 42,000 shares of unrestricted common stock worth $520,380. Long-term compensation for his services as vice chairman was 300,000 shares of restricted common stock in 2004. In addition, he received $1,038,731 from his retirement plans associated with his earlier years of service with Ford Motor Company.</p>
<p>(&#8220;Other compensation&#8221; refers to certain tax reimbursements and various perquisites such as required use of the company aircraft. Other details are noted on page 33 of the proxy statement.)</p>
<p>The Compensation Committee of Ford&#8217;s Board of Directors, which is composed of independent directors, determines compensation of the executives listed in the proxy statement.</p>
<p>WebProNews | Breaking eBusiness News<br />
Your source for investigative ebusiness reporting and breaking news.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/ford-files-proxy-statement-2005-04/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TypePad Access Problems</title>
		<link>http://www.webpronews.com/typepad-access-problems-2005-03</link>
		<comments>http://www.webpronews.com/typepad-access-problems-2005-03#comments</comments>
		<pubDate>Tue, 15 Mar 2005 16:09:34 +0000</pubDate>
		<dc:creator>Neville Hobson</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[typepad]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=15876</guid>
		<description><![CDATA[TypePad have had some server issues during the past few days, meaning that you may have had some problems at times in accessing blogs hosted on TypePad.
]]></description>
			<content:encoded><![CDATA[<p>TypePad have had some server issues during the past few days, meaning that you may have had some problems at times in accessing blogs hosted on TypePad.</p>
<p><img width="293" vspace="0" hspace="0" height="130" border="0" align="left" src="http://www.nevon.net/nevon/images/typepadalert.jpg" title="TypePad alert" />This alert note was posted by Typepad at the weekend.</p>
<p>Today, though, for a period of about two hours this afternoon, I could neither log in to <a href="http://www.typepad.com/">TypePad</a> nor see my blog. Alarmingly, I was getting error messages in the browser saying &#8220;(111) Connection refused. The remote host or network may be down. Please try the request again.&#8221;</p>
<p>I couldn&#8217;t access any other TypePad-hosted blog either during this time.</p>
<p>Hopefully, TypePad will soon resolve whatever the problems are. Sorry if you&#8217;ve been inconvenienced today.</p>
<p><b>Edit:</b> Posting this entry took nearly 10 minutes, with &#8220;Waiting for www.typepad.com&#8230;&#8221;displayed in the browser status bar the whole time.</p>
<p>What&#8217;s especially a concern is when you get an error message like this right in the middle of the publishing process:</p>
<p><i>Proxy Error<br />
The proxy server received an invalid response from an upstream server.<br />
The proxy server could not handle the request GET /t/app/weblog/post.<br />
Reason: Error reading from remote server</i></p>
<p>This happened twice. Luckily the post was successfully published. Eventually.</p>
<p>Neville Hobson is the author of the popular <b><a href="http://www.nevillehobson.com/">NevilleHobson.com blog</a></b> which focuses on business communication and technology.
<p>Neville is currentlly the VP of New Marketing at <a href="http://www.crayonville.com/">Crayon</a>. Visit Neville Hobson&#8217;s blog: <b><a href="http://www.nevillehobson.com/">NevilleHobson.com</a></b>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/typepad-access-problems-2005-03/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating and Consuming a Web Service</title>
		<link>http://www.webpronews.com/creating-and-consuming-a-web-service-2004-10</link>
		<comments>http://www.webpronews.com/creating-and-consuming-a-web-service-2004-10#comments</comments>
		<pubDate>Tue, 26 Oct 2004 22:25:43 +0000</pubDate>
		<dc:creator>Scott Mitchell</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=12420</guid>
		<description><![CDATA[One of the most powerful aspects of .NET is the ease with which one can create Web Services. A Web Service is an external interface provided by a Web site that can be called from other Web sites. For example, a financial company may make up to the minute stock quotes available via a Web Service for those who do their trading with that company. This information could be read from a Web page and displayed, or read from a stand-alone application on a customer's desktop computer.
]]></description>
			<content:encoded><![CDATA[<p>One of the most powerful aspects of .NET is the ease with which one can create Web Services. A Web Service is an external interface provided by a Web site that can be called from other Web sites. For example, a financial company may make up to the minute stock quotes available via a Web Service for those who do their trading with that company. This information could be read from a Web page and displayed, or read from a stand-alone application on a customer&#8217;s desktop computer.</p>
<p>In this article we&#8217;ll examine the two parts of a Web Service: how to create it and how to consume it. Specifically, we&#8217;ll be creating a Web Service that exposes the FAQs from <a href="http://www.aspfaqs.com/aspfaqs/">ASPFAQs.com</a>. </p>
<p><b>Creating the Web Service</b></p>
<p>When creating a Web Service you must ask yourself, &#8220;What service am I trying to provide my users?&#8221; The goal of this article is to create a Web Service that will allow other Web sites to provide a listing of the FAQs from ASPFAQs.com on their site. Ideally, I want to restrict other sites to only being able to view the listing of FAQ categories and the FAQs by category. If they wish to view an &#8220;Answer&#8221; to a FAQ, I want the user to have to visit www.aspfaqs.com. Formally, my Web Service should provide other Web sites the ability to: </p>
<p><b>1.</b> View a listing of all of the FAQ categories </p>
<p><b>2.</b> View a listing of all of the FAQs for a particular category </p>
<p><b>3.</b> View the &#8220;Question&#8221; (but not the Answer) for a particular FAQ </p>
<p>Creating Web Services is quite simple. Start by creating a .asmx file (either through Visual Studio .NET or your favorite text editor (may I suggest Web Matrix, which has a template for creating Web Services)). The Web Service is created as an ordinary class; the methods that have the &lt;WebMethod()&gt; macro before them indicate the method is accessible via the Web Service. </p>
<p>For the ASPFAQs.com Web Service, we will create three Web Service-accessible methods: GetCategories, GetFAQsInCategory, and GetFAQ, which perform the tasks (1), (2), and (3) outlined above, respectively. A private helper function, GetDataSet, is also included, which essentially populates a DataSet based on a passed in SQL query. The code for our Web Service class can be seen below: </p>
<p><code>&lt;%@ WebService Language="VB" Class="ASPFAQs" %&gt;<br />
Imports System.Web.Services<br />
Imports System.Data<br />
Imports System.Data.SqlClient<br />
Imports System.Configuration</p>
<p>Public Class ASPFAQs<br />
&#038;nbsp  Private Function GetDataSet(strSQL as String) as DataSet<br />
&#038;nbsp&#038;nbsp    '1. Create a connection<br />
&#038;nbsp&#038;nbsp    Dim myConnection as New SqlConnection(ConnectionString)</p>
<p>&#038;nbsp&#038;nbsp    '2. Create the command object, passing in the SQL string<br />
&#038;nbsp&#038;nbsp    Dim myCommand as New SqlCommand(strSQL, myConnection)</p>
<p>&#038;nbsp&#038;nbsp    myConnection.Open()</p>
<p>&#038;nbsp&#038;nbsp    '3. Create the DataAdapter<br />
&#038;nbsp&#038;nbsp    Dim myDataAdapter as New SqlDataAdapter()<br />
&#038;nbsp&#038;nbsp    myDataAdapter.SelectCommand = myCommand</p>
<p>&#038;nbsp&#038;nbsp    '4. Populate the DataSet and close the connection<br />
&#038;nbsp&#038;nbsp    Dim myDataSet as New DataSet()<br />
&#038;nbsp&#038;nbsp    myDataAdapter.Fill(myDataSet)<br />
&#038;nbsp&#038;nbsp    myConnection.Close()</p>
<p>&#038;nbsp&#038;nbsp    'Return the DataSet<br />
&#038;nbsp&#038;nbsp    Return myDataSet<br />
&#038;nbsp  End Function</p>
<p>  &lt;WebMethod()&gt; Public Function GetCategories() as DataSet<br />
&#038;nbsp&#038;nbsp    Return GetDataSet(SQL Query for Retrieving the FAQ Categories)<br />
&#038;nbsp  End Function</p>
<p>&#038;nbsp  &lt;WebMethod()&gt; Public Function GetFAQsInCategory(catID as Integer) as DataSet<br />
&#038;nbsp&#038;nbsp    Return GetDataSet(SQL Query for Retrieving the FAQs for Category catID)<br />
&#038;nbsp  End Function</p>
<p>&#038;nbsp  &lt;WebMethod()&gt; Public Function GetFAQ(FAQID as Integer) as DataSet<br />
&#038;nbsp&#038;nbsp    Return GetDataSet(SQL Query for Retrieving the FAQ FAQID)<br />
&#038;nbsp  End Function<br />
End Class</code></p>
<p>Some things to note: the three Web Service-accessible methods are predicated with &lt;WebMethod()&gt;; at the top of the .asmx file is a @WebService directive that specifies the language and class in the file; the Web Service is named ASPFAQs, as shown by the class name. Once you have created this .asmx file and stored it on a Web-accessible directory, you can view the methods by visiting the page directly through your Web browser. For example, I named my Web Service file ASPFAQs.asmx and saved it in the /ws directory; so, by visiting <a href="http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx">http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx</a>, you can see a listing of the Web Method&#8217;s public methods. Furthermore, you can &#8220;try out&#8221; the Web Methods by providing input parameters and viewing the returned results. </p>
<p>If you&#8217;ve read the <a href="http://www.4guysfromrolla.com/webtech/061902-1.shtml">Protecting Yourself from SQL Injection Attacks</a> article you may be concerned that in using Web Services that accept parameters that are used directly in a SQL statement you are opening yourself up to a SQL Injection attack. (The GetFAQsInCategory and GetFAQ are two such methods that may concern the alert reader.) However, SQL Injection attack is not a problem here because the Web Service code automatically ensures that the input parameter is of the correct type, which is Integer here. Hence, if a malicious user attempts to pass to the Web Service an input parameter of, say, 0 <i>&#8216;malicious SQL statement</i>, an error message like Cannot convert 0 &#8216;malicious SQL to System.Int32. Parameter name: type &#8211;> Input string was not in a correct format will be returned. If, however, the input string is of type String, you should be sure to sanitize the input string by replacing all single apostrophes with two successive single apostrophes. </p>
<p>As the creator of the Web Service, our job is done &#8211; we&#8217;ve created the Web Service and other Web sites can now use it through their Web site. You may be wondering, though, how a Web Service can be &#8220;consumed&#8221; by another Web site.</p>
<p><a name="Consuming"></a><b>Consuming a Web Service</b></p>
<p>For a Web site to consume a Web Service, a rather complicated and terse communication must occur between the client Web site (henceforth referred to as the &#8220;consumer&#8221;) and the Web site that is providing the Web server (henceforth the &#8220;producer&#8221;). Essentially, the consumer must decide what producer&#8217;s method it wishes to call. If there are input parameters, these parameters must be converted into XML to be passed along. An HTTP request is then made from the consumer to the producer, specifying the method it wishes to call and passing along the parameters in either a SOAP request, through the QueryString, or in the POST headers. </p>
<p>The producer receives the incoming request, unpackages the input parameters, and calls the appropriate method of the specified class. This method, when complete, returns some value, which is packaged up and sent back to the consumer in an HTTP response. The consumer receives this response, unpackages the return value, completing the Web Service call. </p>
<p>Clearly we&#8217;d like to not have to worry about the HTTP message passing semantics at all when using Web Services. In order to remove this as a concern, we use what is called a Proxy class. Proxy classes serve as an intermediate step between the program (or Web page) on the consumer and the actual Web service on the producer. For each method in the producer&#8217;s Web Service, there is a method in the Proxy class. It is the responsibility of the Proxy class to do all of the complicated message-passing tasks; essentially this complexity is hidden in the class, our Web page can simply call the methods of this class and not concern itself with the underlying semantics involved in calling a Web Service. </p>
<p><b>What in the World did he just Say?</b></p>
<p>By this point you&#8217;re likely thoroughly confused, and that&#8217;s understandable, this can be a confusing topic. The fundamental thing to understand is that the HTTP communications that must occur between a consumer and producer when calling a Web Service can be complicated and require much code. We&#8217;d prefer to have our Web pages that utilize Web Services be able to invoke the Web Service just as if it were a local component. In order to accomplish this, a Proxy class is used, whose public interface mirrors that of the Web Service. If you are still confused, consider viewing <a href="http://aspnet.4guysfromrolla.com/code/ConsumeWS.ppt">this PowerPoint presentation</a>, which illustrates how to consume a Web Service. (Note that it shows how to create the Proxy class from the command-line; in this article we&#8217;ll be using Visual Studio .NET.) </p>
<p><b>Creating the Proxy Class in Visual Studio .NET</b></p>
<p>Creating a Proxy class for a Web Service is a breeze in Visual Studio .NET. In your ASP.NET Web Project, simply right click on the References icon and choose to &#8220;Add a Web Reference.&#8221; A dialog box will appear asking you for a URL &#8211; simply enter the URL of the Web Service, such as: http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx. You will then see the description of the Web Service (just as if you had visited the URL directly through your Web browser). To complete this task, click the &#8220;Add Reference&#8221; button, which will automatically create the Proxy class for you and compile it. </p>
<p>When added to your project the Proxy class&#8217;s namespace will likely be the URL of your site, for example: com.4guysfromrolla.aspnet. (You can rename this if you so choose.) To call the Web Service from a Web page you use the Proxy class like you would any other local component. Imagine that we wanted to display a list of the FAQs from the ASP.NET category (which has category ID 22). We could do this by making a call to the GetFAQsInCategory method of the Web Service, passing in the parameter 22, and binding the resulting DataSet to a DataGrid, like so: </p>
<p><code>'HTML content in .aspx page...<br />
&lt;asp:datagrid id="dgCategoryFAQs" runat="server" /&gt;</p>
<p>'*** ------------------------------------------------ ***'</p>
<p>'code content in the code-behind page<br />
Private Sub Page_Load(sender as Object, e as EventArgs)<br />
&#038;nbsp  'Create an instance of the Proxy class<br />
&#038;nbsp  Dim consumeWebService as com._4guysfromrolla.aspnet.ASPFAQs<br />
&#038;nbsp  Set consumeWebService = New com._4guysfromrolla.aspnet.ASPFAQs</p>
<p>&#038;nbsp  'Bind the results of GetFAQsInCategory to dgCategoryFAQs<br />
&#038;nbsp  dgCategoryFAQs.DataSource = consumeWebService.GetFAQsInCategory(22)<br />
&#038;nbsp  dgCategoryFAQs.DataBind()<br />
End Sub</code></p>
<p>From simply examining the code you could not determine that the call to the com._4guysfromrolla.aspnet.ASPFAQs Proxy class is, in actuality, a remote Web service call. When the Proxy class&#8217;s GetFAQsInCategory method is called, the complex communications discussed previously occur (the remote HTTP request/response dialogue). </p>
<p><b>Creating a Proxy Class without Visual Studio .NET </b></p>
<p>Creating a Proxy class through Visual Studio .NET is very easy; however, if you don&#8217;t have Visual Studio .NET, you can still create Proxy classes, but you must do so through the command-line. For more information on this technique be sure to read the PowerPoint presentation: Calling a Web Service from an ASP.NET Web Page.  </p>
<p><b>Conclusion</b></p>
<p>In this article we examined how to create a Web Service and then how to consume it from an ASP.NET Web page using Visual Studio .NET. Microsoft has really simplified the process of producing and consuming Web Services with .NET. Creating a Web Service is as simple as creating a .asmx file and writing the code for the Web Service methods &#8211; save for the &lt;WebMethod()&gt; macros, the code appears nearly identical to the code one would write for a local component. Consuming a Web Service is painfully simple too, thanks to the use of Proxy classes. On top of that, the creation of Proxy classes is utterly simple through tools such as Visual Studio .NET. </p>
<p>*Originally published at <a href="http://aspnet.4guysfromrolla.com/articles/062602-1.aspx#postadlink">4 Guys From Rolla.com</a></p>
<p><a href="http://www.4GuysFromRolla.com/ScottMitchell.shtml">Scott Mitchell</a>, author of five ASP/ASP.NET books and founder of <a href="http://www.4GuysFromRolla.com">4GuysFromRolla.com</a>, has been working with Microsoft Web technologies for the past five years. An active member in the ASP and ASP.NET community, Scott is passionate about ASP and ASP.NET and enjoys helping others learn more about these exciting technologies. For more on the DataGrid, DataList, and Repeater controls, check out Scott&#8217;s book ASP.NET Data Web Controls Kick Start (ISBN: 0672325012). Read his blog at : http://scottonwriting.net</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/creating-and-consuming-a-web-service-2004-10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Wrappers and Proxies for Basic Web Services Tracking</title>
		<link>http://www.webpronews.com/use-wrappers-and-proxies-for-basic-web-services-tracking-2004-04</link>
		<comments>http://www.webpronews.com/use-wrappers-and-proxies-for-basic-web-services-tracking-2004-04#comments</comments>
		<pubDate>Thu, 29 Apr 2004 20:10:18 +0000</pubDate>
		<dc:creator>Uche Ogbuji</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Tracking]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=9844</guid>
		<description><![CDATA[Some commercial Web services software provides sophisticated Web services accounting features, recording details of Web services transactions recognized on the wire. But sometimes developers need accounting that is more modular, much more basic, and available on a shoestring. This article explains how to use advanced function composition tasks to add basic Web services monitoring capabilities.
]]></description>
			<content:encoded><![CDATA[<p>Some commercial Web services software provides sophisticated Web services accounting features, recording details of Web services transactions recognized on the wire. But sometimes developers need accounting that is more modular, much more basic, and available on a shoestring. This article explains how to use advanced function composition tasks to add basic Web services monitoring capabilities.</p>
<p>Technologies that predate mainstream Web services offer a dual nature in the way they fit into frameworks. The likes of ONC RPC, CORBA, and XML-RPC can be comprised either through the language-specific stubs that drive their common usage or through their wire formats. Web services consist of more than just RPC style, of course, but this style does dominate its mainstream use. What this means in practice is that developers create stubs for remote objects by writing compatible interfaces by hand, processing WSDL files, or even dynamic methods and introspection. But the services invocation then comes as a simple method call.</p>
<p>As these method calls get marshaled to wire formats and stream across the network, developers and administrators often want to keep track of things by maintaining detailed transaction logs in order to debug service behavior, profile performance, test security controls, and even model traffic shape for service-level improvement. A variety of vendors have lined up to provide tools to help with such monitoring, almost all of which focus on actual wire transactions. You can even get a box from some vendors that you pop into the rack in your data center, and plug into the network to gain such monitoring capabilities</p>
<p>Wire monitoring tools are generally expensive and require a lot of set-up and care. Considering that the idea behind Web services is that interchange can come from a diversity of end-points in a diversity of languages and platforms, wire monitoring is probably the most comprehensive approach in an enterprise environment. Then again, in reality most Web services in deployment are intra-departmental and even point-to-point. When Web services are used as an applications integration tool, such comprehensive monitoring is rarely needed. Even when such comprehensiveness is justified, it often makes sense to defer deployment of full-blown monitoring systems until production testing, which means that developers in earlier phases still need a means of keeping track of Web services for debugging and planning purposes.</p>
<p>It is also useful to have the ability to support Web services monitoring through the operation of the programming language stubs at the end points. The most general way of approaching this is by using techniques of function composition according to available language features. Most programmers think of such techniques as building wrappers and proxies.</p>
<h4>Compose your methods</h4>
<p>In functional and dynamic languages, function composition is usually straightforward at its root and flexible enough to come in numerous implementations. To demonstrate the basic technique, Listing 1 shows Python code that uses dynamic features to log all invocations of a remote method to standard error on the console.</p>
<p><b>Listing 1. Demonstration of function composition in Python for mixing logging capabilities into SOAP</b></p>
<p><code>import sys      #Use standard system object of the interpreter<br />
import SOAPpy   #Use the third-party SOAP/WSDL toolkit SOAPpy</p>
<p>class logging_proxy:<br />
&#038;nbsp  """<br />
&#038;nbsp  Requires Python 2.2 or more recent for proper operation<br />
&#038;nbsp  """<br />
&#038;nbsp  def __init__(self, subject, stream):<br />
 &#038;nbsp   """<br />
 &#038;nbsp&#038;nbsp   This is a documentation string, similar to Javadoc</p>
<p>&#038;nbsp    __init__ is the Class initializer (like a constructor)<br />
 &#038;nbsp   subject - the object to which we delegate<br />
 &#038;nbsp   stream - the file-like object for log output</p>
<p>&#038;nbsp    Special parameter:<br />
&#038;nbsp    self - the instance upon which a method is invoked<br />
 &#038;nbsp   """<br />
 &#038;nbsp   self.subject = subject<br />
 &#038;nbsp   self.stream = stream<br />
 &#038;nbsp   return</p>
<p> &#038;nbsp def __getattr__(self, attr):<br />
 &#038;nbsp   """<br />
 &#038;nbsp   Special method name that intercepts all requests for an<br />
 &#038;nbsp   attribute or method on an instance.<br />
 &#038;nbsp   attr - the name of the requested attribute/method<br />
 &#038;nbsp   """<br />
 &#038;nbsp   #getattr is a special global function which gets the named<br />
 &#038;nbsp   #attribute of an object.<br />
 &#038;nbsp   #Result is generally a data member or function object (method)<br />
 &#038;nbsp   obj = getattr(self.subject, attr)<br />
 &#038;nbsp   if callable(obj):<br />
 &#038;nbsp&#038;nbsp     #Then it's a method, not a plain attribute<br />
 &#038;nbsp&#038;nbsp     def log_wrapper(*args, **kwargs):<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         #Write pre-call log<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         self.stream.write("Invoking remote method %sn"%attr)<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         self.stream.write("tpositional params: %sn"%repr(args))<br />
&#038;nbsp&#038;nbsp&#038;nbsp          self.stream.write("tnamed params: %sn"%repr(kwargs))<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         #Now invoke the service, passing on the parameters<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         result = obj(*args, **kwargs)<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         #Write post-call log<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         self.stream.write("Method %s completedn"%attr)<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         self.stream.write("tReturn value: %sn"%result)<br />
 &#038;nbsp&#038;nbsp&#038;nbsp         return result<br />
 &#038;nbsp&#038;nbsp     return log_wrapper<br />
 &#038;nbsp&#038;nbsp   else:<br />
 &#038;nbsp&#038;nbsp&#038;nbsp       return obj</p>
<p>WSDL_URI = "http://www.xmethods.net/sd/2001/TemperatureService.wsdl"</p>
<p>#Create the remote service proxy<br />
#All the needed data comes from the WSDL<br />
service = SOAPpy.WSDL.Proxy(WSDL_URI)<br />
#wrap the service to the add logging feature (log to stderr)<br />
wrapped_service = logging_proxy(service, sys.stderr)</p>
<p>#From here on all invocations of methods on the Web service<br />
#Automatically go through the logging code first<br />
zipcode = '80027'<br />
temp = wrapped_service.getTemp(zipcode)<br />
print 'Temperature in US postal code ', zipcode, 'is', temp, 'F'</code></p>
<p>The definition of the class <code>logging_proxy </code>need only occur once. You can then wrap just about any class with it to meld in the logging capability. If you&#8217;re not familiar with Python, this function might be a bit hard to follow. The heart of the technique is the definition of log_wrapper, which forms what is called a closure. For Java programmers this is reminiscent of inner classes. The closure captures the information about the actual Web service method stub to be invoked (the function object called obj) as well as the stream for the log output. The caller gets this closure when it invokes a SOAP method by name, which triggers the special method <code>__getattr__. </code>In usual cases of method invocation the return result is a function object, which is then executed. In this case the returned function object is a closure which encapsulates some logging code and the data needed to call the original function. The overall effect is a composition of the <code>log_wrapper </code>code and the actual remote method invocation. The rest of the code in the module puts the technique to use. Only one additional line is required besides the usual SOAP client code:</p>
<p><code>service = logging_proxy(service, sys.stderr)</code></p>
<p>This one-time set-up is required for each remote service. As you can see, the output stream is parameterized: You can send some logs to a file and others to a network socket. You can parameterize other details easily enough. Overall, this technique provides a huge amount of flexibility. The following snippet shows the output from <a href="http://www-106.ibm.com/developerworks/xml/library/x-wraprx.html#code1">Listing 1</a>:</p>
<p><code>$ python listing1.py<br />
Invoking remote method getTemp<br />
  &#038;nbsp&#038;nbsp&#038;nbsp      positional params: ('80027',)<br />
  &#038;nbsp&#038;nbsp&#038;nbsp      named params: {}<br />
Method getTemp completed<br />
 &#038;nbsp&#038;nbsp&#038;nbsp       Return value: 21.0<br />
Temperature in US postal code  80027 is 21.0 F</code></p>
<p>The last line represents the normal processing of the method result. The five previous lines are output from the logging code.</p>
<h4>A proxy on your network</h4>
<p>Another approach to monitoring is to listen at the network level. Simply set up a proxy server of your own that performs some monitoring action while forwarding traffic to and from each remote service end-point. The proxy server listens on the same protocol as the remote server, but when it gets a request it simply performs the necessary action, such as logging the request. It then forwards the request to the remote service, and passes any response back to the original client. Listing 2 is a program that operates as such a proxy for SOAP over HTTP. It&#8217;s also in Python, but the nature of this proxying approach is such that this code can be used with any Web service regardless of the language used to implement either SOAP end point. </p>
<p><b>Listing 2. Script that logs then forwards SOAP/HTTP messages</b></p>
<p><code>import sys<br />
import BaseHTTPServer<br />
import httplib</p>
<p>class ProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):<br />
 &#038;nbsp def do_POST(self):<br />
&#038;nbsp&#038;nbsp    clen = int(self.headers.getheader('content-length'))</p>
<p> &#038;nbsp   #dest is the true SOAP end point address.  It comes in as<br />
 &#038;nbsp   #a standard HTTP Host header, that is the host then the port<br />
 &#038;nbsp   #separated by a colon.  Break this into the components<br />
 &#038;nbsp   dest = self.headers.getheader('Host')<br />
 &#038;nbsp   dest_host, dest_port = dest.split(':')</p>
<p> &#038;nbsp   #Read the HTTP payload<br />
  &#038;nbsp  request_body = self.rfile.read(clen)</p>
<p>  &#038;nbsp  #Log the HTTP details to STDERR<br />
 &#038;nbsp   sys.stderr.write('Path:' + self.path + 'n')<br />
 &#038;nbsp   sys.stderr.write('Headers:n')<br />
 &#038;nbsp   for k, v in self.headers.items():<br />
  &#038;nbsp&#038;nbsp      sys.stderr.write('t' + str(k) + ': ' + str(v) + 'n')<br />
  &#038;nbsp  sys.stderr.write('Payload:n')<br />
  &#038;nbsp  #input_body is the request SOAP envelope and contents<br />
  &#038;nbsp  sys.stderr.write(request_body)</p>
<p>  &#038;nbsp  #Create a matching request to the actual destination<br />
  &#038;nbsp  requestor = httplib.HTTP(dest_host, dest_port)<br />
  &#038;nbsp  requestor.putrequest('POST', self.path)<br />
 &#038;nbsp   for k, v in self.headers.items():<br />
  &#038;nbsp&#038;nbsp      requestor.putheader(k, v)<br />
 &#038;nbsp   requestor.endheaders()<br />
  &#038;nbsp  requestor.send(request_body)</p>
<p> &#038;nbsp   #Wait for the response from the remote host and forward it<br />
  &#038;nbsp  #as a response from this host<br />
 &#038;nbsp   (status_code, message, response_headers) = requestor.getreply()<br />
 &#038;nbsp   response_body = requestor.getfile().read()<br />
  &#038;nbsp  self.send_response(200, 'OK')<br />
 &#038;nbsp   for k, v in response_headers.items():<br />
  &#038;nbsp&#038;nbsp      self.send_header(k, v)<br />
 &#038;nbsp   self.end_headers()<br />
&#038;nbsp    self.wfile.write(response_body)<br />
  &#038;nbsp  return</p>
<p>LISTENING_PORT= 8888<br />
#Set up to run on local machine<br />
SERVER_ADDRESS = ('127.0.0.1', LISTENING_PORT)<br />
httpd = BaseHTTPServer.HTTPServer(SERVER_ADDRESS, ProxyHandler)<br />
print "Listening on port", LISTENING_PORT<br />
#Go into a the main event loop<br />
httpd.serve_forever()</code></p>
<p>The method do_POST on ProxyHandler is executed once the server receives SOAP by way of an HTTP POST invocation. It logs the HTTP headers and payload (that is, the SOAP message) and then makes an equivalent call to the actual remote end point. The HTTP response from the remote end point is forwarded back to the original client. This proxy code is very flexible because, if used correctly, it can determine the actual destination from the HTTP headers. In the code, this is read into the dest variable. This means that you can use this one SOAP/HTTP proxy to handle any number of requests for all variety of actual destination end points. The original clients see the same network traffic as if they were communicating to the remote server directly. Listing 3 is an example of client code that uses the SOAP/HTTP proxy. </p>
<p><b>Listing 3. SOAP client that proxies its messages for logging</b></p>
<p><code>import sys&#038;nbsp&#038;nbsp&#038;nbsp      #Use standard system object of the interpreter<br />
import SOAPpy&#038;nbsp&#038;nbsp&#038;nbsp   #Use the third-party SOAP/WSDL toolkit SOAPpy</p>
<p>WSDL_URI = "http://www.xmethods.net/sd/2001/TemperatureService.wsdl"<br />
#WSDL_URI = "http://localhost:8888/sd/2001/TemperatureService.wsdl"</p>
<p>#Create the remote service proxy<br />
#All the needed data comes from the WSDL<br />
service = SOAPpy.WSDL.Proxy(WSDL_URI)<br />
service.soapproxy.http_proxy = 'localhost:8888'</p>
<p>zipcode = '80027'<br />
temp = service.getTemp(zipcode)<br />
print 'Temperature in US postal code ', zipcode, 'is', temp, 'F'</code></p>
<p>This is pretty much boilerplate remote procedure calling code except for the line:</p>
<p><code>service.soapproxy.http_proxy = 'localhost:8888'</code></p>
<p>Most SOAP libraries give you a mechanism for directing a SOAP request through a proxy. This line sets an HTTP proxy for the SOAP client, pointing it to port 8888 on the local machine. Because setting the HTTP Host header is a standard step in using an HTTP proxy, very little additional work is needed to get the proxy server to forward the traffic properly. </p>
<p>The main limitation with this HTTP proxy trick is that you have to add more customization to handle usage patterns that are more complex than the common request/response interaction. Luckily, such customization isn&#8217;t terribly difficult. </p>
<h4>Wrap up</h4>
<p>I have just scratched the surface of function composition and the capabilities of network service proxying. These themes have many variations and most languages support similar capabilities. If you&#8217;re using a functional language (such as Python), you can follow up on these compositional tricks by experimenting with <b>currying</b> and other such techniques. If you&#8217;re using a static object-oriented language such as Java, look into <b>aspect-oriented programming (AOP)</b>. Programmers have lots of options for adding infrastructural capabilities to Web services without having to buy expensive wire monitoring tools.</p>
<p><b>Resources</b></p>
<li>Find out more about <a href="http://pywebsvcs.sourceforge.net/">SOAPpy</a> 0.11.1, which the author used here for the SOAP/WSDL client code. He covers this toolkit and others in his &#8220;<a href="http://www-106.ibm.com/developerworks/views/webservices/articles.jsp?sort_order=desc&#038;expand=&#038;sort_by=Date&#038;show_abstract=true&#038;view_by=Search&#038;search_by=Python+Web+services">Python Web services developer&#8221; column</a>. </li>
<li>Intrigued by some of the techniques used in this piece? Then take a look at David Mertz&#8217;s excellent &#8220;<a href="http://www-106.ibm.com/developerworks/views/linux/articles.jsp?sort_order=desc&#038;expand=&#038;sort_by=Date&#038;show_abstract=true&#038;view_by=Search&#038;search_by=charming+python%3A">Charming Python&#8221; column</a> and items in the Python Cookbook mentioning <a href="http://aspn.activestate.com/ASPN/search?query=composition&#038;x=0&#038;y=0&#038;section=PYTHONCKBK&#038;type=Subsection">composition</a> and <a href="http://aspn.activestate.com/ASPN/search?query=curry&#038;x=0&#038;y=0&#038;section=PYTHONCKBK&#038;type=Subsection">curry</a>.</li>
<li><a href="http://aosd.net/">Aspect-oriented programming (AOP)</a> is an important system for implementing similar techniques in static programming languages. If you&#8217;re a Java programmer, see &#8220;Improve <a href="http://www-106.ibm.com/developerworks/java/library/j-aspectj/">modularity with aspect-oriented programming</a>&#8221; (<i>developerWorks</i>, January 2002) by Nicholas Lesiecki.</li>
<li>Find more related resources on the <i>developerWorks</i> <a href="http://www.ibm.com/developerworks/xml/">XML</a> and <a href="http://www-136.ibm.com/developerworks/webservices/">Web services </a>zones. You can also sign up for the weekly <a href="http://www-106.ibm.com/developerworks/newsletter/">Web services/XML tips newsletter.</a></li>
<li>Browse a wide range of XML-related titles at the <i>developerWorks</i> <a href="http://devworks.krcinfo.com/">Developer Bookstore</a>.</li>
<p>Find out how you can become an <a href="http://www-1.ibm.com/certify/certs/adcdxmlrt.shtml">IBM Certified Developer in XML and related technologies</a>.</p>
<hr />
First published by IBM developerWorks at <a href="http://www.ibm.com/developerWorks/">http://www.ibm.com/developerWorks/</a>.</p>
<p>Uche Ogbuji is a consultant and co-founder of <a href="http://fourthought.com/">Fourthought Inc.</a>, a software vendor and consultancy specializing in XML solutions for enterprise knowledge management. Fourthought develops <a href="http://4suite.org/">4Suite</a>, an open source platform for XML, RDF, and knowledge-management applications. Mr. Ogbuji is also a lead developer of the <a href="http://uche.ogbuji.net/tech/rdf/versa/">Versa</a> RDF query language. He is a computer engineer and writer born in Nigeria, living and working in Boulder, Colorado, USA. You can contact Mr. Ogbuji at uche.ogbuji@fourthought.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/use-wrappers-and-proxies-for-basic-web-services-tracking-2004-04/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo&#8217;s Site Match Links Unveiled</title>
		<link>http://www.webpronews.com/yahoos-site-match-links-unveiled-2004-04</link>
		<comments>http://www.webpronews.com/yahoos-site-match-links-unveiled-2004-04#comments</comments>
		<pubDate>Thu, 08 Apr 2004 19:23:33 +0000</pubDate>
		<dc:creator>Garrett French</dc:creator>
				<category><![CDATA[Search]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[Match]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.webpronews.com/?p=9597</guid>
		<description><![CDATA[Tim Mayer of Yahoo visited WebProWorld recently to set the record straight on the difference between how regular Yahoo results appear and how Site Match results appear.
]]></description>
			<content:encoded><![CDATA[<p>Tim Mayer of Yahoo visited WebProWorld recently to set the record straight on the difference between how regular Yahoo results appear and how Site Match results appear.</p>
<p><a href="http://www.webproworld.com/viewtopic.php?p=90527">Speculate on the proxy results in WebProWorld</a>.</p>
<table width="350" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center"><img src="http://images.ientrymail.com/webpronews/sitematch.unveiled.jpg" class="irImage" alt="Peek-a-boo! Site Match Links Say Hi" title="Peek-a-boo! Site Match Links Say Hi"></td>
</tr>
<tr>
<td align="right" class="caption" style="padding-bottom: 10px; padding-left: 45px; padding-right: 45px;">Peek-a-boo! Site Match Links Say Hi</td>
</tr>
<tr>
<td align="center" class="caption" style="padding-bottom: 0px;"><img src="http://images.ientrymail.com/webpronews/salon/complete.gif" width="334" height="21"></td>
</tr>
</table>
<p><a href="http://www.yahoo-watch.org/cgi-bin/proxy.htm">Check out the Yahoo proxy search here</a>.</p>
<p><a href="http://www.webproworld.com/profile.php?mode=viewprofile&#038;u=12044">Ronniethedodger</a> pointed to what he thought were Site Match results:<br />
<span style="color: #FF9900;">http://rds.yahoo.com/S=2766679/K=money+business/v=2/TID<br />
=F251_44/SID=e/l=WS1/R=6/H=0/*<br />
-http://www.everythingaboutvitamins.com/</span>.</p>
<p>These links are what Daniel Brandt calls, &#8220;plain &#8220;click counter&#8221; redirects that appear on every URL.&#8221; </p>
<p>Tim responded that this was not in fact a Site Match link, and that Site Match links look like this:<br />
<span style="color: #FF9900;">rdrw1.yahoo.com/click?u=http://www.ibiblio.org/tkan/xmcd&#038;<br />
y=022F06033A99E6E8&#038;i=482&#038;c=9106&#038;<br />
q=02%5ESSHPM%5BL7%7C%7B%3Fos~fzm6&#038;e=utf-8&#038;r=25&#038;<br />
d=wow-en-us&#038;n=8R545H097DP408T1&#038;s=21&#038;t=&#038;m=4072437D<br />
&#038;x=01D37651EA37F317. </span><br />
(For the unmangled link visit <a href="http://www.webproworld.com/viewtopic.php?p=89624#89624">Yahoo&#8217;s post</a>.)</p>
<p>If you&#8217;d like to see Yahoo&#8217;s results unveiled check out Daniel Brandt&#8217;s proxy search over at <a href="http://www.yahoo-watch.org/cgi-bin/proxy.htm">Search showdown: Yahoo v. Google</a>.  Brandt&#8217;s proxy strips out the first redirect that appears on a standard Yahoo search, and it&#8217;s in the secondary redirects that we see the &#8220;rdrw1.&#8221;</p>
<p>The proxy gets results from two different data centers, so sometimes the beginning &#8220;rdrw1&#8243; changes to &#8220;rdre1.&#8221;</p>
<p>Brandt&#8217;s been recording data and has identified several parameters in the url that are likely to have some bearing regarding how these links are added to the results.</p>
<p>The identified (though yet undefined) parameters are:</p>
<p>MI=ic<br />
MI=ss<br />
MI=free<br />
MI=other<br />
MI=sitematch</p>
<p>Brandt&#8217;s proxy search is an excellent way to see which of your competitors have possibly paid to get urls in Yahoo&#8217;s results. </p>
<p>WebProNews and Google-Watch appear with the MI=other parameter and neither of us have paid for inclusion, which suggests a relationship between MI=other and RSS feeds.  </p>
<p>Brandt added that, &#8220;[Danny] Sullivan&#8217;s site was this way when we talked two weeks ago, but now his XML &#8216;My Yahoo&#8217; link is gone in the main search.yahoo.com listings, and he has a normal link on my proxy. So that reinforces the theory that the XML and MI=other are related.&#8221;</p>
<p>As Yahoo&#8217;s set to drop the Inktomi pfi links on April 15th, what we&#8217;re seeing now may change dramatically.  Says Brandt, &#8220;I am interested in how the links will change on April 15 &#8212; how many of what Tim calls a Site Match link, and what I merely refer to an &#8216;almost all of them are paid&#8217; link, will get dropped by Yahoo.&#8221;</p>
<p><a href="http://www.yahoo-watch.org/cgi-bin/proxy.htm">Check out the Yahoo proxy search</a>.</p>
<p>Garrett French is the editor of iEntry&#8217;s eBusiness channel.  You can talk to him directly at <a href="http://www.webproworld.com">WebProWorld</a>, the eBusiness Community Forum. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webpronews.com/yahoos-site-match-links-unveiled-2004-04/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Database Caching 1/42 queries in 0.020 seconds using memcached
Object Caching 614/708 objects using memcached

Served from: webpronews.com @ 2012-02-12 12:22:07 -->
