How To: Making a PHP REST client to call REST resources

A lot of companies these days (including Amazon and Yahoo!) are exposing their web services in the form of REST resources. At a high level REST is pretty easy to understand, all you’re doing is exposing a web service in the form of a URL. Users can then query this URL, through HTTP methods like GET and POST. REST calls generally return some type of XML or Object Encoding like JSON.

An example would be Yahoo!’s Geocoding API, with the following URL:


I would get:

<Result precision="address">
   <Address>701 FIRST AVE</Address>

So Yahoo! exposes the Geocode URL and allows you to query this resource using URL parameters like appid and street. Dynamically building your URL to query a given resource is OK, generally that’s what people do, like the following:

$base = '';
$query_string = "";

$params = array( 'ManufacturerSearch' => "O'Reilly",
    'mode'  => 'books',
    'sort'  => '+salesrank',
    'page'  => 1,
    'type'  => 'lite',
    'f'     => 'xml',
    't'     => 'trachtenberg-20' ,
    'dev-t' => 'XXXXXXXXXXXXXX' ,

foreach ($params as $key => $value) {
    $query_string .= "$key=" . urlencode($value) . "&";

$url = "$base?$query_string";
$output = file_get_contents($url);

The problem here, is that REST is meant to take advantage of HTTP methods GET, POST, PUT, DELETE, etc.. When people are showing examples which dynamically build queries and call file_get_contents, the average user doesn’t appreciate (understand) what type of request is being made. Do they care? Should they care? We’ll that’s another story. Eventually though, more intense REST resources will become widely available, and it will be critical the user (developer) understands if their making a POST or PUT request.

I came across a great PEAR package the other day called HTTP_REQUEST, which among many things supports GET/POST/HEAD/TRACE/PUT/DELETE, basic authentication, proxy, proxy authentication, SSL, file uploads and more. Using this package, I got started on a simple wrapper class called RESTclient, which gives intuitive support for making REST resource calls.

So if I was going to use RESTclient to call the Geocode API above, it would look like this:


require_once "RESTclient.php";

$rest = new RESTclient();

$inputs = array();
$inputs["appid"] = "YahooDemo";
$inputs["street"] = "701 First Street";
$inputs["city"] = "Sunnyvale";
$inputs["state"] = "CA";

$url = ""
$output = $rest->getResponse();
echo $output;


At this point, you might be thinking, who cares — what’s the difference between using a loop to dynamically generate the URL or RESTclient. There are lots of reasons, first off, I can easily call the Geocode resource again using another address just by changing:

$inputs["street"] = "1600 Amphitheatre Parkway";
$inputs["city"] = "Mountain View";

There was no need to re-generate the URL. Furthermore, I’m explicitly specifying a POST request. Just as easily I can make a PUT, DELETE, etc. request on a given resource by changing the createRequest method parameters.

The class below is RESTclient. Note, I put this together to prove a point, it still needs some work if you plan on using it.


require_once "HTTP/Request.php";

class RESTClient {

    private $root_url = "";
    private $curr_url = "";
    private $user_name = "";
    private $password = "";
    private $response = "";
    private $responseBody = "";
    private $req = null;

    public function __construct($root_url = "", $user_name = "", $password = "") {
        $this->root_url = $this->curr_url = $root_url;
        $this->user_name = $user_name;
        $this->password = $password;
        if ($root_url != "") {
        return true;

    public function createRequest($url, $method, $arr = null) {
        $this->curr_url = $url;
        $this->req =& new HTTP_Request($url);
        if ($this->user_name != "" && $this->password != "") {
           $this->req->setBasicAuth($this->user_name, $this->password);

        switch($method) {
            case "GET":
            case "POST":
            case "PUT":
                // to-do
            case "DELETE":
                // to-do

    private function addPostData($arr) {
        if ($arr != null) {
            foreach ($arr as $key => $value) {
                $this->req->addPostData($key, $value);

    public function sendRequest() {
        $this->response = $this->req->sendRequest();

        if (PEAR::isError($this->response)) {
            echo $this->response->getMessage();
        } else {
            $this->responseBody = $this->req->getResponseBody();

    public function getResponse() {
        return $this->responseBody;


Related Articles:

88 Responsesto “How To: Making a PHP REST client to call REST resources”

  1. Raja Nagendra Kumar, says:

    Does any one know of similar client for J2ME pl.

  2. Ghassem says:

    Thanks; there is a little bug in your test code at this line :
    $url = “”
    you forgot the tailing “;”.
    $url = “” ;

    I have a question: how can I find the target site has or has not this service, and how you find out REST of Amazon and Yahoo?
    Please response me soon,I’m waiting!


  3. George A. Papayiannis says:

    Hi Ghassem,

    Sorry for the delay in responding, I get so much spam on this blog now that it’s hard to stay on top of these things. The only way to know if the site supports REST is to take a look at their developer areas. For example at Yahoo for PHP it would be this page and at Amazon this page.

    Good luck,

  4. manuj says:

    Hi george i was going thru ur blog….
    Just want to make a suggestion regarding ur spam concern in ur blog… use

  5. manuj says:


  6. George A. Papayiannis says:

    Hi Manuj,

    Thanks for the tip, I have Akismet turned on and it catches a lot of the spam, but still stuff gets through.

    Talk to you soon,

  7. Logu says:

    thanks, very useful.
    I need to upload a file to REST Server, How can i do that using RESTClient class

  8. arnod'mental says:

    Nice article, I’m englued into a SOAP client/server and as services start to get more and more complex I think I’ll migrate to REST (before it’s too late…).

    > Logu :
    You could create a POST or PUT request, sending 2 or 3 variables for your file : file name, mime type (optionally), and a base64_encode of the file itself (retreived using file_get_contents for example)
    Then on the serverside you will need to create a new file with the specified name and write into it the base64_decode of the sent variable.

  9. rim says:

    wew, great article.

    I need to know more about REST, could you please help me. How do I know the response is from yahoo api ??

    I’ve try it, but I got no result than err…


  10. rim says:

    could you please give me HTTP/Request.php library…

    I don’t have it… Or where should I can find it..


  11. ravi says:

    can you tell me more about REST…
    i dont have enough knowledge about it..

  12. rohit kumar says:


    i don’t have enough knowledge about rest.

    please can u tell me how to connect through a MySQL server which can ONLY be accessed from the REST server.


  13. php5rrr says:

    you can also use stream_context_create() to set the method for the request.
    $opts= Array ( ‘http’=>Array(
    ‘header’ => ‘Content-type: application/x-www-form-urlencoded’,
    file_get_contents(“http://localhost/example/post.php”, false, $resource);

  14. Adam B says:

    I like to use cURL in php for connecting to REST services. Simply call the URI and then use simpleXML to parse the response. simple, takes less than 15 lines to get a very simple client to work.

  15. Adam B says:

    The function i use to access REST services

  16. Adam B says:

    // PHP Functions needed to access various APIs
    function get_REST_xml($uri, $rawXML = 0)
    global $parsed;
    global $uri;
    $getXML = curl_init() or die(curl_error()); // initialize curl handle
    curl_setopt($getXML, CURLOPT_URL,$uri); // set url to post to
    curl_setopt($getXML, CURLOPT_FAILONERROR, 1);
    curl_setopt($getXML, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
    curl_setopt($getXML, CURLOPT_RETURNTRANSFER,1); // return into a variable
    // curl_setopt($getXML, CURLOPT_SSL_VERIFYHOST, 2);
    // curl_setopt($getXML, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($getXML , CURLOPT_HEADER, 0);
    curl_setopt($getXML, CURLOPT_TIMEOUT, 3); // times out after 4s
    // curl_setopt($getXML,CURLOPT_POST,1); // Set the method as post
    // curl_setopt($getXML, CURLOPT_POSTFIELDS, "key=".$API_key);
    $pulledXML = curl_exec($getXML);
    //echo ("");
    //echo ("");
    // echo "\n\ncURL error number:" .curl_errno($getXML);
    // echo "\n\ncURL error:" . curl_error($getXML);
    // ...close cURL handle ($getXML) below

    if ($rawXML == 0)
    $parsed = simplexml_load_string($pulledXML);
    return $parsed;
    elseif($rawXML == 1)
    return $pulledXML;
    echo "Function Error";

  17. simo says:

    can somebody help me to consum a webservice using php curl and xerces with data from MySQL…I am a newby but i make it subjectif “learning by doing”
    thanks a lot

  18. simo says:

    Sorry I wanna mean how many script shall I write for this action! Request Response and parsing with xerces.

  19. Peter says:

    There is a great Eclipse plugin where you can visually construct your REST call:

    Of course this is not an PHP client, yet it is very priceless tool for REST and HTTP.

  20. Adolfo says:

    how rest work with this kind of uris … without extension… it sounds more familiar


  21. Jaspreet says:

    can anyone help me in using REST.
    Lets say i have link (
    It have a method
    How can i access or use or call this method .
    Now, let us say i have created a php page containing form where i will enter my email and password.
    now when i click on login after entering my mail and password.
    It should use this method and we can say a session will start and i will able to acess the other page.
    Now can any one tell me how can i do this??
    What should i write in ACTION
    please give a example.

  22. Jaspreet says:

    this is the method > loginForm
    what should i write in form action means in .. .action=”???” m

  23. Geddy says:

    George, excellent article. However, I’m trying to begin writing my own lightweight REST class for use with Amazon Web Services, but I’m confused by one thing in your class:

    require_once “RESTclient.php”;

    Is this line just assuming that we have *some REST client* to use? Which one would you recommend using? I only need to send GET requests for the time being. If you could reply to this, it’d be much appreciated :)

    Thanks man,

  24. tester says:

    I want to know what is the content of file HTTP/Request.php.
    What is in this file?

  25. otto06217 says:

    The author mentioned this pear package above.

    I hope this helps.

    Within the next days I’ll try it out.



  26. Taner Ozdas says:

    Is there any way to use REST without pear? In a shared hosting environment , it is not possiable to use it .

  27. Vallabh V says:

    where do I find HTTP/Request.php file

  28. Vallabh V says:

    Nice article!!! How the Pear HTTP is better than CURL?

  29. nanocult says:

    HTTP_Request package has been superseded. Use HTTP_Request2 instead. In the code above, please correct the following: require_once "HTTP/Request.php";
    You have to change the following:
    sendRequest() to send()
    And change the function in RESTClient class:
    private function addPostData($arr) {
    if ($arr != null) {
    foreach ($arr as $key => $value) {
    $this->req->addPostData($key, $value);

    to the following:
    private function addPostData($arr) {
    if ($arr != null) {
    foreach ($arr as $key => $value) {
    $this->req->addPostParameter($key, $value);

  30. Làm Web says:

    Could i use HTTP_Request to GET REST in google customsearch v1 ?

  31. Sebastian says:

    have you done already PUT method?

  32. rockynu says:

    appid=demo then it works

  33. sunny says:

    i am new to php
    i have downloaded the restclient class from
    and while working with the example above
    i am gettin eroor
    Call to undefined method RESTClient::createRequest()
    i am using xampp server version1.7.7
    please help

  34. fabrice says:


    i am currently working on an interface control,
    and i have a problem with the request about the user and password.
    i was inspired with this:
    class RESTClient {

    private $root_url = “”;
    private $curr_url = “”;
    private $user_name = “”;
    private $password = “”;
    private $response = “”;
    private $responseBody = “”;
    private $req = null;

    public function __construct($root_url = “”, $user_name = “”, $password = “”) {
    $this->root_url = $this->curr_url = $root_url;
    $this->user_name = $user_name;
    $this->password = $password;
    if ($root_url != “”) {
    to code but the answer is always negative.
    please help

  35. jnmik says:

    Here’s a good working example I found

  36. Wayne says:

    This article is actually a fastidious one it helps
    new web people, who are wishing in favor of blogging.

  37. diaper rash home remedies says:

    I believe everything said made a great deal of sense. But, what about
    this? what if you typed a catchier post title?
    I ain’t suggesting your content isn’t solid, but what if you added something that makes people want more?
    I mean How To: Making a PHP REST client to call REST resources | George Papayiannis is a little plain.

    You could look at Yahoo’s home page and watch how they create news titles to grab people to click. You might try adding a video or a pic or two to grab readers excited about what you’ve got to
    say. In my opinion, it might make your posts a little bit
    more interesting.

  38. April says:

    Hey very nice blog!

    my webpage :: [April]( “April”)

  39. says:

    [Recommended Internet site](http://thebackspacer47.tumblr.
    com/ “Recommended Internet site”)

  40. get microsoft points Free says:

    Hi! I’ve been reading your site for some time now and finally got the bravery to go ahead and give you a shout out from Atascocita Tx! Just wanted to mention keep up the fantastic job!

    Have a look at my web-site … [get microsoft points Free]( “get microsoft points Free”)

  41. Rudolph says:

    There is a market out there for all types of shoes. Wait until after Halloween to buy your
    costumes to resell on Ebay. Offering more than one mode of paying will encourage a lot of people to place their bids
    without second thoughts.

    Feel free to visit my blog – [Rudolph](
    com/watch?v=NFP5xCH0ihg “Rudolph”)

  42. says:

    Hello, of course this article is genuinely pleasant and I have learned lot
    of things from it on the topic of blogging.

    My website; [](

    php?uid=6360 “”)

  43. coconut oil for hair says:

    I really like what you guys are usually up too. This sort of
    clever work and exposure! Keep up the wonderful works guys I’ve included you guys to our blogroll.

    Feel free to visit my blog post: [coconut oil for hair]( “coconut oil for hair”)

  44. How to make money from Pictures says:

    Using a tripod is strongly recommended whenever shooting out in the wild.
    The wheels of change have been set into motion, people are becoming
    more aware and commercially the communication sent out to them
    as to change in tandem. At the core of her studio is an EZCube light tent, a white fabric
    box that provides a seamless background to her images, that is
    lit from each side by daylight balanced bulbs.

    Feel free to surf to my web page: [How to make money from Pictures](http://www. “How to make money from Pictures”)

  45. 7zipdownload says:

    It is appropriate time to make a few plans for the longer term and it is time to be happy.
    I’ve learn this put up and if I may just I wish to suggest you few interesting things or tips. Maybe you could write subsequent articles referring to this article. I desire to learn more things approximately it!

    my homepage :: [7zipdownload](HTTP:// “7zipdownload”)

  46. big name wedding dresses designers says:

    Everyone loves what you guys are up too. This sort of clever work and exposure!
    Keep up the excellent works guys I’ve included you guys to my own blogroll.

    Feel free to surf to my webpage; [big name wedding dresses designers]( “big name wedding dresses designers”)

  47. Terri says:

    It’s nearly impossible to find knowledgeable people about this subject, however, you seem like you know what you’re talking about!

    Feel free to surf to my blog – [Terri](https://www.Youtube.
    com/watch?v=AVFQaAhg_2c “Terri”)

  48. Unknown says:

    I’d like to thank you for the efforts you’ve put in penning this website.
    I really hope to check out the same high-grade content by you in the future as
    well. In fact, your creative writing abilities has motivated me to get my own,
    personal website now ;)

    Also visit my webpage … [Unknown](http://Akilahwee. “Unknown”)

  49. Unknown says:

    It’s very simple to find out any topic on net as compared to books, as I found this piece of writing at this web page.

    Have a look at my web-site [Unknown]( “Unknown”)

  50. pirater Un Compte facebook says:

    Neat blog! Is your theme custom made or did you download it from somewhere?
    A design like yours with a few simple tweeks would really make my blog jump out.
    Please let me know where you got your theme.


    Also visit my homepage – [pirater Un Compte facebook](http://dailymotion.
    “pirater Un Compte facebook”)

  51. The Interlace says:

    My partner and I stumbled over here by a different web page and thought I should check things out.
    I like what I see so i am just following you. Look
    forward to looking at your web page repeatedly.

    Feel free to surf to my website … [The Interlace](HTTP://www. “The Interlace”)

  52. Code Psn Gratuit says:

    Please let me know if you’re looking for a article writer for your weblog. You have some really great articles and I believe I would be a good asset. If you ever want to take some of the load off, I’d absolutely love to write some articles
    for your blog in exchange for a link back to mine.
    Please shoot me an email if interested. Thanks!

    My web site: [Code Psn Gratuit](
    v=MX3DdCb2X_Q “Code Psn Gratuit”)

  53. Tyree says:

    Amazing issues here. I am very satisfied to see your article.
    Thanks a lot and I am taking a look ahead to touch you.
    Will you please drop me a e-mail?

    Look at my web blog Free Psn Codes :: [Tyree](http://Www. “Tyree”) ::

  54. Code Psn Gratuit says:

    Fantastic beat ! I would like to apprentice at the same time as you amend your website, how can i subscribe for a weblog web site? The account helped me a appropriate deal. I were a little bit familiar of this your broadcast offered vivid clear idea

  55. Psn Code gratuit says:

    naturally like your web site but you need to check the spelling on several of your posts. Several of them are rife with spelling issues and I find it very bothersome to inform the truth on the other hand I will surely come back again.

  56. photography Tips says:

    This may take a few trial runs before you get
    the effect that you want but it will be worth it for a really stunning final image.
    For each shot, the setting was altered to achieve order and uniformity.
    Photography tasks are ideal creative those who artistic vision
    as well as the skills to discover it through.

    Feel free to surf to my web page: [photography Tips](http://www.
    be “photography Tips”)

  57. Katelynn Richer says:

    Appreciate you sharing, great article. Fantastic.

  58. Jaydon Petrillo says:

    I loved your blog article.Thanks Again.

  59. Rocky Tessier says:

    Thank you for your article post.Really looking forward to read more. Cool.

  60. Angeline Luther says:

    Thanks again for the article.Thanks Again. Much obliged.

  61. cheap ivory wedding dresses says:

    Great post however I was wondering if you could
    write a litte more on this topic? I’d be very thankful if you could elaborate a little bit further. Bless you!

    Review my blog; [cheap ivory wedding dresses]( “cheap ivory wedding dresses”)

  62. Cody says:

    It’s a shame you don’t have a donate button! I’d definitely donate to this brilliant blog! I guess for now i’ll settle for book-marking and adding your RSS feed to my Google account.
    I look forward to new updates and will share this blog with my Facebook group.
    Talk soon!

    Here is my homepage – custom wedding gowns ([Cody](http://Www. “Cody”))

  63. says:

    Great post. I was checking constantly this weblog and I’m inspired! Very helpful info particularly the remaining section :) I deal with such information a lot. I was looking for this certain information for a long time. Thanks and best of luck.

    Look at my blog :: buy silver online :: []( “”) ::

  64. fat burning foods says:

    Great beat ! I wish to apprentice even as you amend your web site, how
    could i subscribe for a blog website? The account helped me a applicable deal.
    I have been tiny bit acquainted of this your broadcast offered brilliant clear concept

    Feel free to surf to my web-site :: [fat burning foods](http://www. “fat burning foods”)

  65. how to lose weight in week naturally says:

    It’s an amazing post in support of all the online people; they will take benefit from it I am sure.

    Visit my web-site; [how to lose weight in week naturally]( “how to lose weight in week naturally”)

  66. fasting for weight loss says:

    Peculiar article, exactly what I needed.

    Feel free to visit my blog :: [fasting for weight loss](https://www. “fasting for weight loss”)

  67. Antonietta says:

    Hi! Quick question that’s completely off topic. Do you know how to make your site mobile friendly? My weblog looks weird when viewing from my iphone. I’m trying to find a theme or plugin that might be able to fix this issue.

    If you have any suggestions, please share. Appreciate it!

    Also visit my web page: bridal dresses *[Antonietta](http://www. “Antonietta”)*

  68. best weight loss program for women says:

    I’ve been surfing online more than 4 hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me.
    In my opinion, if all webmasters and bloggers
    made good content as you did, the web will be much more useful
    than ever before.

    my web blog … [best weight loss program for women](http://www. “best weight loss program for women”)

  69. where Can i buy gold and silver says:

    Article writing is also a excitement, if you be familiar with
    afterward you can write otherwise it is difficult to write.

    Visit my web page: [where Can i buy gold and silver](http://abraham23h. “where Can i buy gold and silver”)

  70. low carb diet says:

    Thanks for your personal marvelous posting! I seriously enjoyed reading it, you happen to be a great author.
    I will remember to bookmark your blog and will eventually come back from now
    on. I want to encourage you to definitely continue your great posts, have a nice morning!

    Feel free to visit my web site … [low carb diet](http://www. “low carb diet”)

  71. healthy weight loss eating plan for women says:

    What a stuff of un-ambiguity and preserveness
    of precious experience on the topic of unexpected feelings.

    Here is my page [healthy weight loss eating plan for women](http://www. “healthy weight loss eating plan for women”)

  72. Charmain says:

    Hey! This post couldn’t be written any better! Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this post to him. Fairly certain he will have a good read. Thanks for sharing!

    Here is my weblog – weight loss tips ([Charmain]( “Charmain”))

  73. Candy Crush says:

    We hang them on the tree or decorate presents with them, but what can be done with them once
    Christmas is over. She even warns her father that if he doesn’t rein them in now, Lydia will “be the most determined flirt that ever made herself and her family ridiculous. a haunt query i get is what foods to squander when dieting.

    Also visit my webpage – [Candy Crush]( “Candy Crush”)

  74. 台北網頁設計 says:

    Thank you for every other magnificent article. The place else may anyone
    get that type of information in such a perfect means of writing?
    I’ve a presentation subsequent week, and I am on the look
    for such info.

    Here is my web blog: [台北網頁設計]( “台北網頁設計”)

  75. best way to burn fat says:

    It’s genuinely very complex in this busy life to listen news on Television, therefore I just use the
    web for that reason, and obtain the latest news.

    Here is my webpage: [best way to burn fat]( “best way to burn fat”)

  76. Sung says:

    I have read so many articles on the topic of the blogger lovers except this
    post is genuinely a good article, keep it up.

  77. says:

    Hi there everyone, it’s my first go to see at this web page, and post is in fact fruitful for me,
    keep up posting these articles.

    my webpage – how to get rid of acne ([]( “”))

  78. carb cycling diet says:

    What’s up to every one, the contents existing at this web site are genuinely remarkable for people experience, well, keep up
    the nice work fellows.

    my webpage: [carb cycling diet]( “carb cycling diet”)

  79. says:

    I visited several web sites except the audio feature for audio songs current
    at this web page is truly excellent.

    My webpage; fastest way to lose weight ([]( “”))

  80. Oma says:

    fantastic issues altogether, you simply won a new reader.
    What might you suggest about your publish that you made a few
    days in the past? Any certain?

    My site Simcity 2013 Crack ([Oma]( “Oma”))

  81. Car Town Hack says:

    Nice weblog here! Also your web site loads up very fast!

    What host are you the use of? Can I am getting your associate hyperlink
    on your host? I wish my web site loaded up
    as quickly as yours lol

    Visit my web site: [Car Town Hack]( “Car Town Hack”)

  82. Pool Live Tour Hack says:

    Does your site have a contact page? I’m having trouble locating it but, I’d like
    to send you an e-mail. I’ve got some suggestions for your blog you might be interested in hearing.
    Either way, great website and I look forward to seeing it grow over time.

    Also visit my blog post: [Pool Live Tour Hack]( “Pool Live Tour Hack”)

  83. search engine optimization says:

    It’s hard to find experienced people on this topic, however, you sound like you know what you’re talking about!

    Here is my site :: [search engine optimization]( “search engine optimization”)

  84. เต็นท์ผ้าใบ says:

    Wonderful beat ! I would like to apprentice while you amend your web
    site, how could i subscribe for a blog web site? The account aided me
    a acceptable deal. I had been a little bit acquainted of this your broadcast provided bright clear concept

  85. download candy crush saga hack says:

    When it arrives to figuring out all the ins and outs of a movie game|specifically the ones on your telephone|you could devote countless numbers of several hours on end trying to beat it this is why Sweet Crush Saga Reside Resource 3.eight.five was created!
    For you gamers to just take benefit of all the unique characteristic this instrument offers.
    Not only you will rewards from all these attributes
    but you will also aid by yourself conquer each
    and every degree the discouraged you for a although.
    No more waiting hrs to get existence or have a restricted quantity
    of boosters. Now everything you desire has been included in this instrument and appropriate with
    Facebook|Apple Devices (Ipod|Ipad|Iphones) and Android phones also.

  86. Http:// says:

    Usimg the cleaning services 85308 cleaning services.

    For example, in a much better way than you actually need to be cooked and clothes need to be taken care of.
    This is onee of thee best NJ maid company which fulfill all
    valid credentials which one goo maids company must have, tuat is more productive.

  87. carnival cruise ship elation staterooms says:

    That might not seem like a bonus, but it will be at trade in time.
    Avoid sitting with your legs crossed; move them regularly.
    Consistency should exist from month to month in each individual account.

  88. Solihull carpenter says:

    c) are supported by credible industry reputation, reliability and service.
    Mark out one line equal to the width of your floor
    space. I prefer to use particle board because it is less expensive than plywood and works just as well.

Leave a Reply

Line and paragraph breaks automatic.
XHTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>