<?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>The Incurable Geek &#187; http</title>
	<atom:link href="http://nicolasrosental.com/tag/http/feed/" rel="self" type="application/rss+xml" />
	<link>http://nicolasrosental.com</link>
	<description>Web Development, Coworking and 42</description>
	<lastBuildDate>Fri, 03 Sep 2010 18:46:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Twitter Response Codes Simplified</title>
		<link>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/</link>
		<comments>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 20:16:48 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[responsecodes]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=146</guid>
		<description><![CDATA[I recently attended an AtlantaPHP meet-up where Ben Ramsey talked about &#8220;The Hidden Gems in HTTP&#8221;. That gave me the idea to explain the response codes you might see when using the Twitter API, and give some practical examples too. We will be using PHP and cURL to access the API. If you aren&#8217;t too [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended an <a title="AtlantaPHP - PHP User Group" href="http://atlantaphp.org/">AtlantaPHP</a> meet-up where <a href="http://twitter.com/ramsey">Ben Ramsey</a> talked about &#8220;The Hidden Gems in HTTP&#8221;. That gave me the idea to explain the response <a href="http://apiwiki.twitter.com/HTTP-Response-Codes-and-Errors?SearchFor=http+code&amp;sp=1">codes</a> you might see when using the Twitter API, and give some practical examples too.</p>
<p>We will be using PHP and cURL to access the API. If you aren&#8217;t too familiar, please read <a href="http://nicolasrosental.com/?p=42">this post.</a></p>
<p>Each heading is exactly what you will find in the<a title="Response Codes and Errors" href="http://apiwiki.twitter.com/HTTP-Response-Codes-and-Errors"> Twitter API documentation</a>, along with my own explanation and some examples.</p>
<h3><strong>200 OK</strong>: Success!</h3>
<p>Let&#8217;s say I want to get a list of my followers, I can use the code example below, and if I get a <strong>200 OK </strong>return code I know that my request has been successful.</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter
$user_followers = "https://twitter.com/statuses/followers/nicdev.xml";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $user_followers); //URL to connect to
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET method
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn,CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!&lt;strong&gt;&lt;/strong&gt;</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>// Result from querying URL. Will parse as xml
$output = curl_exec($curl_conn);</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<pre>echo $output;</pre>
<p>If you are following along you will now have a pretty messy screen full of information about your followers. The part of the response we are interested in, it&#8217;s in the first line.</p>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009
13:51:56 GMT Server: hi X-RateLimit-Limit:
20000 X-Transaction: 1257861116-80037-4182
Status: 200 OK</pre>
<p>The 200 OK code let&#8217;s us know it&#8217;s all good, and our request has been successfully processed.</p>
<h3><strong>304 Not Modified</strong>: There was no new data to return.</h3>
<p>This one is a bit trickier. In short, a 304 code means that there is no new data to a request. I attempted to send the request repeatedly through a &#8220;for loop&#8221; but I got a <strong>200 OK </strong>every time. I tried to search for bug reports so I could try to reproduce it, but no dice. Maybe they don&#8217;t really provide 304&#8242;s? If you know a way of getting it to reply 304, please comment.</p>
<h3><strong>400 Bad Request</strong>: The request was invalid.  An accompanying error message will explain why. This is the status code will be returned during <span style="color: #000000;">rate limiting.</span></h3>
<p>Well, Twitter imposes all sorts of limits on the amount of API calls you can make, and this is a good thing. The limits imposed are workable, and can be increased if you are a developer and <a href="http://twitter.com/help/request_whitelisting">ask nicely</a>. The default limit is 150/hour on any given account, so it was easy to reproduce.</p>
<p>Change the script as follows, and refresh the page.</p>
<pre>//Replace the line  $output = curl_exec($curl_conn); with the following block of code.</pre>
<pre>for($i = 0; $i &lt; 160; $i++)
{
    $output = curl_exec($curl_conn);
    $output = substr($output, 0, 200);
    echo $output."&lt;br /&gt;";
}</pre>
<p>You will probably get a lot of<strong> 200 </strong>codes followed by <strong>400&#8242;s.</strong></p>
<pre>HTTP/1.1 400 Bad Request Date: Tue, 10 Nov
2009 14:43:40 GMT Server: hi
X-RateLimit-Limit: 150 Status: 400 Bad
Request X-RateLimit-Remaining: 0
X-Runtime: 0.01104 Content-Type:
application/xml;</pre>
<h3><strong>401 Not Authorized</strong>: Authentication credentials were missing or incorrect.</h3>
<p>Does as it says, and there&#8217;s a great way of testing it out, the <strong>verify_credentials </strong>method. Simply pass it a bad username and password and you&#8217;ll have a <strong>401</strong> error to call your own.</p>
<pre>//Change this part in the original script.</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$user_followers = "http://twitter.com/account/verify_credentials.xml";</pre>
<pre>//Don't forget to change the credentials to something invalid</pre>
<p>Here&#8217;s the result</p>
<pre>HTTP/1.1 401 Unauthorized Date: Tue, 10 Nov
2009 15:16:24 GMT Server: hi Status: 401
Unauthorized</pre>
<h3><strong>403 Forbidden</strong>: The request is understood, but it has been refused.  An accompanying error message will explain why. This code is used when requests are being denied due to update limits.</h3>
<p>You simply tweet too much! Again, you hit a rate limit that is pretty forgiving for most people. The following piece of code will actually post just one tweet to your account, which will most likely get a <strong>200 OK</strong> code; I&#8217;m posting in in case you were looking for a short script to post updates to Twitter. The second one will actually try to post more messages than it&#8217;s allowed in order to purposely get a <strong>403</strong> code.</p>
<p>Please note that because Twitter checks you aren&#8217;t sending the exact same message repeatedly, I&#8217;m changing the text in every post.</p>
<p>One tweet:</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://twitter.com/statuses/update.xml";
$options = "status=This is a test status made with PHP"; //The actual message is a required parameter</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password..'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>// Result from querying URL. Will parse as xml</pre>
<pre>$output = curl_exec($curl_conn);</pre>
<pre>echo $output;</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p>Many, many tweets.</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://twitter.com/statuses/update.xml";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>for($i=0;$i &lt; 160;$i++)
{
    $options = "status=This is a test status made with PHP to reach a 403".md5($i); //Change the message on each iteration
    curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
    $output = curl_exec($curl_conn);
    $output = substr($output,0,200);
    echo $output;
}</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p><img class="size-full wp-image-158 alignnone" title="Twitter SPAM" src="http://nicolasrosental.com/wp-contents/uploads/2009/11/Screen-shot-2009-11-10-at-2.05.13-PM.png" alt="Twitter SPAM" width="191" height="164" /></p>
<pre>HTTP/1.1 403 Forbidden Date: Tue, 10 Nov
 2009 18:54:52 GMT Server: hi
X-Transaction: 1257879292-55915-20315
Status: 403 Forbidden
Last-Modified: Tue, 10..</pre>
<p>In case you haven&#8217;t noticed this is spamming, and it uses a lot of resources unnecessarily, so don&#8217;t do it, please.</p>
<h3><strong>404 Not Found</strong>: The URI requested is invalid or the resource requested, such as a user, does not exist.</h3>
<p>This one is very simple. You&#8217;re looking for something that&#8217;s just not there. To try it out, go to the original script and change the request to a user you know doesn&#8217;t exist. For example @nicdev1232342</p>
<pre>$user_followers = "https://twitter.com/statuses/followers/nicdev1232342.xml";</pre>
<pre>HTTP/1.1 404 Not Found Date: Tue, 10 Nov
 2009 19:16:49 GMT Server: hi
X-RateLimit-Limit: 150 X-Transaction:
 1257880609-95984-9773 Status:
404 Not Found</pre>
<p><strong>406 Not Acceptable</strong>: Returned by the Search API when an invalid format is specified in the request.</p>
<p>Either the dpcumentation is wrong, or I&#8217;m too slow to understand. I tried making a request for followers using an non-existing format of .noformat, and all I got was a lousy <strong>403</strong>. Again, if someone knows how to get this one to fire, please let me know and I&#8217;ll update the post.</p>
<pre>$user_followers = "https://twitter.com/statuses/followers/nicdev.noformat";</pre>
<p>I wanted a <strong>406</strong>!</p>
<pre>HTTP/1.1 403 Forbidden Date: Tue, 10
 Nov 2009 19:23:03 GMT Server: hi
 X-Transaction: 1257880983-50850-
1216 Status: 403 Forbidden</pre>
<p><strong>500 Internal Server Error</strong>: Something is broken.  Please post to the group so the Twitter team can investigate.</p>
<p>This one you can&#8217;t reproduce at will, but if you play with the Twitter API long enough you&#8217;re bound to run into it.</p>
<p><strong>502 Bad Gateway</strong>: Twitter is down or being upgraded.</p>
<p><img class="alignnone size-full wp-image-165" title="Fail Whale" src="http://nicolasrosental.com/wp-contents/uploads/2009/11/failwhale.png" alt="Fail Whale" width="330" height="225" /><br />
<strong>503 Service Unavailable</strong>: The Twitter servers are up, but overloaded with requests. Try again later. The search and trend methods use this to indicate when you are being rate limited.</p>
<p>The following script will run a search for the term &#8220;argentina&#8221; against the Twitter search API. Search limits are independent of other limits, and will return a <strong>503</strong> as opposed to a <strong>403</strong> when reaching the rate limit.</p>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://search.twitter.com/search.json?&amp;amp;amp;amp;amp;amp;amp;amp;amp;q=argentina";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>for($i=0;$i &lt; 160;$i++)
{
    $output = curl_exec($curl_conn);
    $output = substr($output,0,200);
    echo $output."&lt;br /&gt;";
}</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p>This one was a true surprise. While running the script that loops around 160 times I received many <strong>200&#8242;s</strong>, followed by a <strong>502 Bad Gateway</strong>, followed by a <strong>503 Service Unavailable</strong> (what I was expecting), and then again by a bunch of <strong>200&#8242;s</strong>. It seems to me that the rate limit on search is very forgiving.</p>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009 19:49:38
HTTP/1.1 502 Bad Gateway Date: Tue, 10 Nov 2009 19:49:42</pre>
<pre>HTTP/1.0 503 Service Unavailable</pre>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009 19:50:01</pre>
<p>I hope you enjoyed the post and that it&#8217;ll help you when writing applications for Twitter, or any other app that relies on response codes. To finish here are some great resources.</p>
<ul>
<li><a title="Twitter API doc" href="http://apiwiki.twitter.com/Twitter-API-Documentation">Twitter API Documentation</a> &#8211; Good docs and a great community built around it.</li>
<li><a title="Scripting Twitter with cURL" href="http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/">Scripting Twitter With cURL &#8211; Tech@Sakana</a></li>
</ul>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d146').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d146" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;submitHeadline=Twitter+Response+Codes+Simplified&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;bm_description=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;T=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Twitter+Response+Codes+Simplified+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;t=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d146').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d146').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->