[greasemonkey-users] read from local file

2,607 views
Skip to first unread message

jyothi panidarapu

unread,
May 21, 2010, 1:39:30 AM5/21/10
to greasemon...@googlegroups.com
Hello all,

Is it possible to open a local file from GM script? I want to read a text file which is locally stored on my machine.


- Jyothi  

--
You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
To post to this group, send email to greasemon...@googlegroups.com.
To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/greasemonkey-users?hl=en.

Erik Vold

unread,
May 21, 2010, 2:12:21 AM5/21/10
to greasemon...@googlegroups.com
No.

But, there two ways to do this I think:

1. way to work around this limitation would be to setup Apache and
your hosts file so that http://your-file.lan/your-file.txt for
example. This req's that you're able to setup Apache on your machine
however.

2. Setup an FTP server on your machine and use that address.

Erik

On 2010-05-20, at 22:39, jyothi panidarapu

jyothi panidarapu

unread,
May 21, 2010, 2:17:43 AM5/21/10
to greasemon...@googlegroups.com
Thanks!

GM_getResourceText()

Is this function you are talking about?




On Fri, May 21, 2010 at 11:42 AM, Erik Vold <erik...@gmail.com> wrote:
No.

But, there two ways to do this I think:

1. way to work around this limitation would be to setup Apache and your hosts file so that http://your-file.lan/your-file.txt for example. This req's that you're able to setup Apache on your machine however.

2. Setup an FTP server on your machine and use that address.

Erik


On 2010-05-20, at 22:39, jyothi panidarapu <jyothi.p...@gmail.com> wrote:

Hello all,

Is it possible to open a local file from GM script? I want to read a text file which is locally stored on my machine.


- Jyothi

--
You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
To post to this group, send email to greasemon...@googlegroups.com.
To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/greasemonkey-users?hl=en.

--
You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
To post to this group, send email to greasemon...@googlegroups.com.
To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/greasemonkey-users?hl=en.




--
- Jyothi  
M.Tech,CSE
IITMadras

Erik Vold

unread,
May 21, 2010, 2:31:13 AM5/21/10
to greasemonkey-users
Ah no, I forgot about that, and I was talking about a different use
case altogether. Glad you found what you're looking for though.

Erik

On May 20, 11:17 pm, jyothi panidarapu <jyothi.panidar...@gmail.com>
wrote:
> Thanks!
>
> GM_getResourceText()
>
> Is this function you are talking about?
>
>
>
>
>
> On Fri, May 21, 2010 at 11:42 AM, Erik Vold <erikvv...@gmail.com> wrote:
> > No.
>
> > But, there two ways to do this I think:
>
> > 1. way to work around this limitation would be to setup Apache and your
> > hosts file so thathttp://your-file.lan/your-file.txtfor example. This
> > req's that you're able to setup Apache on your machine however.
>
> > 2. Setup an FTP server on your machine and use that address.
>
> > Erik
>
> > On 2010-05-20, at 22:39, jyothi panidarapu <jyothi.panidar...@gmail.com>
> > wrote:
>
> >  Hello all,
>
> >> Is it possible to open a local file from GM script? I want to read a text
> >> file which is locally stored on my machine.
>
> >> - Jyothi
>
> >> --
> >> You received this message because you are subscribed to the Google Groups
> >> "greasemonkey-users" group.
> >> To post to this group, send email to greasemon...@googlegroups.com.
> >> To unsubscribe from this group, send email to
> >> greasemonkey-us...@googlegroups.com<greasemonkey-users%2Bunsubs cr...@googlegroups.com>
> >> .
> >> For more options, visit this group at
> >>http://groups.google.com/group/greasemonkey-users?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "greasemonkey-users" group.
> > To post to this group, send email to greasemon...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > greasemonkey-us...@googlegroups.com<greasemonkey-users%2Bunsubs cr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/greasemonkey-users?hl=en.
>
> --
> - Jyothi
> M.Tech,CSE
> IITMadras
>
> --
> You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
> To post to this group, send email to greasemon...@googlegroups.com.
> To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
> For more options, visit this group athttp://groups.google.com/group/greasemonkey-users?hl=en.

jyothi panidarapu

unread,
May 21, 2010, 7:09:47 AM5/21/10
to greasemon...@googlegroups.com
did anybody has written script using this GM_getResourceText  function?

jyothi panidarapu

unread,
May 21, 2010, 8:09:14 AM5/21/10
to greasemon...@googlegroups.com
Can somebody give me a script, which opens a local file (the contents of the local file will be either 0 or 1) for reading. If it is '1' the current page should be reloaded  otherwise do nothing. The script should keep checking the file for update.

esquifit

unread,
May 21, 2010, 2:09:26 PM5/21/10
to greasemon...@googlegroups.com
On Fri, May 21, 2010 at 2:09 PM, jyothi panidarapu
<jyothi.p...@gmail.com> wrote:
> Can somebody give me a script, which opens a local file (the contents of the
> local file will be either 0 or 1) for reading. If it is '1' the current page
> should be reloaded  otherwise do nothing. The script should keep checking
> the file for update.
>

A couple of observations:

1) GM_getResourceText won't work, since this function loads a resource
only once upon installing the scripts and stores a local copy into
"<Firefox profile>/gm_scripts/<script folder>/". If the original file
is updated afterwards, this is not noticed by Greasemonkey.

2) You can open a new tab with the "file" schema
(file:///path/to/your/file.txt)by means of GM_openInTab() [1],
provided you set the value of the preference
"greasemonkey.fileIsGreaseable" to "true" in about:config. One
problem with this approach is that a new tab is created each time, it
is (currently) not possible to either close the tab or reloaded.
Another problem is that this poses a risk if you don't know what
you're doing (malicious script could steal information from your
computer)

3) Regardless of all that I suspect there are better ways to achieve
what you're attempting to do. Maybe you want to supply more details,
for example whether you have some control over the file contents, or
whether a file is really needed.

[1] http://wiki.greasespot.net/GM_openInTab

jyothi panidarapu

unread,
May 21, 2010, 2:30:24 PM5/21/10
to greasemon...@googlegroups.com
Yeah, I can give you details. I actually want to reload my web page if there is any change in my system IP address. The existing scripts are using whatismyip.com to get the ip. My problem here is, in my institution both wired and wireless uses the same proxy. So when you query that site for ip address, it shows the same every time. Because outsiders can only see one ip.

So I what I thought is updating this information to a local file and if somehow javascript can periodically read it, then I can achieve my purpose.
--
- Jyothi  
M.Tech,CSE
IITMadras

esquifit

unread,
May 21, 2010, 4:01:59 PM5/21/10
to greasemon...@googlegroups.com
On Fri, May 21, 2010 at 8:30 PM, jyothi panidarapu
<jyothi.p...@gmail.com> wrote:
> Yeah, I can give you details. I actually want to reload my web page if there
> is any change in my system IP address. The existing scripts are using
> whatismyip.com to get the ip. My problem here is, in my institution both
> wired and wireless uses the same proxy. So when you query that site for ip
> address, it shows the same every time. Because outsiders can only see one
> ip.
>
> So I what I thought is updating this information to a local file and if
> somehow javascript can periodically read it, then I can achieve my purpose.

Just a little brainstorming:

One way would be detecting the ip via java. There is a recent post
addressing this question.

Another way would be trying to load resources from the different
networks and testing timeouts or something like that. The onload and
onerror events of the IMG object are sometime used for this.

If you insist upon using a file, there seems to be a way to accomplish
what you want with a Greasemonkey script, along the following lines:

1) the script should run for the pages you want AND in addition for
the file:/// url of the file
2) If (location.href begins with "file:")
read the page content (which consist exactly of the ip address,
or a '0' or '1', or whatever)
store this value into a preference via GM_setValue
trigger a delayed reload via setTimeout.
else
call a function that
a) reads the value of the above preference via GM_getValue
b) if the preference value is 0 do nothing
c) if the preference value is 1, reload page, or make a
redirection to the mobile url, or whatever
d) self-invoke the function with a delay via setTimeout.

jyothi panidarapu

unread,
May 23, 2010, 11:46:34 PM5/23/10
to greasemon...@googlegroups.com
You mean to say I should add the file location also to the script (in GM to apply this script to this location also).
If so unless I open the location, is the script going to work for that file url?
--
- Jyothi  
M.Tech,CSE
IITMadras

esquifit

unread,
May 24, 2010, 10:11:45 AM5/24/10
to greasemon...@googlegroups.com
On Mon, May 24, 2010 at 5:46 AM, jyothi panidarapu
<jyothi.p...@gmail.com> wrote:
> You mean to say I should add the file location also to the script (in GM to
> apply this script to this location also).
> If so unless I open the location, is the script going to work for that file
> url?

Yes. If you don't make use of 'external' tools (for ex. java), a
usescript can only read
a) the content of a loaded page
b) information retrieved via HttpXmlRequest (or GM_httpxmlRequest)
c) values stored as preferences via GM_setValue

and nothing else. As for b, access to file:/// urls via
GM_httpxmlRequest is disabled by security reasons, as far as I can
remember, though I haven't test it. Regarding c, since you cannot
write into the preference system from external applications (not in a
reasonably easy way, at least), it is also not a valid option.
So you're basically left with a, which means that you have to load the
file into a tab, frame or iframe and run the script on it. Values
stored via GM_setValue are unique to the script, no to the loaded
page, thus they can be used as a kind of poor man's cross domain
information sharing mechanism. I'm not sure, but with the advent of
HTML 5 there may be better ways to do that, though probably not with a
file:/// url.

jyothi panidarapu

unread,
May 25, 2010, 2:29:51 AM5/25/10
to greasemon...@googlegroups.com
Thanks esquifit!
Can you please tell me how to use GM_setValue() to read the value from that opened tab? 
When I see syntax it was showing to read into variable but from where it has to set the variable is not given.
--
- Jyothi  
M.Tech,CSE
IITMadras

Anthony Lieuallen

unread,
May 25, 2010, 9:05:26 AM5/25/10
to greasemon...@googlegroups.com
On 05/25/10 02:29, jyothi panidarapu wrote:
> .. how to use GM_setValue()..

http://wiki.greasespot.net/GM_setValue

jyothi panidarapu

unread,
May 25, 2010, 9:15:21 AM5/25/10
to greasemon...@googlegroups.com
I have already referred to this link. But my doubt is how do I get the value that is loaded in the other tab (which is my local file) ?
I hope you got my doubt.
--
- Jyothi  
M.Tech,CSE
IITMadras

cc

unread,
May 26, 2010, 1:05:57 AM5/26/10
to greasemon...@googlegroups.com
GM_getValue and GM_setValue are not per-tab; that is, they store or retrieve values globally.

Hope this helps.


On 2010-05-25 06:15, jyothi panidarapu wrote:
I have already referred to this link. But my doubt is how do I get the value that is loaded in the other tab (which is my local file) ?
I hope you got my doubt.

On Tue, May 25, 2010 at 6:35 PM, Anthony Lieuallen <aran...@gmail.com> wrote:
On 05/25/10 02:29, jyothi panidarapu wrote:
. how to use GM_setValue()..

http://wiki.greasespot.net/GM_setValue
-- 
cc | pseudonymous | <http://carlclark.mp/>

--
~ I said "NO" to drugs, but they didn't listen. ~ http://tagzilla.mozdev.org v0.066

jyothi panidarapu

unread,
May 26, 2010, 1:10:27 AM5/26/10
to greasemon...@googlegroups.com
Thanks! I was in a little confusion.
My doubt is how to read the value that is loaded in the tab?
As I said I open a text file using firefox which is having a boolean value, I want to read that value.
Can you please how can I read that?

--
You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
To post to this group, send email to greasemon...@googlegroups.com.
To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/greasemonkey-users?hl=en.

esquifit

unread,
May 26, 2010, 1:45:33 AM5/26/10
to greasemon...@googlegroups.com
On Wed, May 26, 2010 at 7:10 AM, jyothi panidarapu
<jyothi.p...@gmail.com> wrote:
> Thanks! I was in a little confusion.
> My doubt is how to read the value that is loaded in the tab?

The steps are roughly as follows:
1) Write a script that runs on a given page (or http://* for that
matter) and the file:

@include http://www.mysite.org/*
@include file:///d:/some/folder/filename.txt

2) Load the file into a tab. The script runs by virtue of the second @include
3) The scripts checks the url is running on; since it is 'file:...' it
proceeds to read the content of the page:
var valueFromFile = document.body.innerHTML (or similar)
and stores the value as a preference
GM_setValue ('MyValue', valueFromFile)
4) When you load a page from www.mysite.org, the script also runs. In
this case, upon having checked that the url is not that of the second
include, the sripts loads the value:
var storedValue = GM_getValue ('MyValue')

This is the basic mechanism. Now come the details:

a) you must check and update the stored value periodically, that means
that you have to reload the file:/// url every X seconds; I suggested
doing that by firing a self-callable function via setTimeout; you have
to do this when the url is file:///; after reloading the file, the
above logic would apply again and the new value would be written to
the preference.
b) you must also periodically check whether you have to reload the
non-file page because of a changed IP. To this end, after having
checked that the url is not the second @include and read the stored
value, the scripts decides based on the value whether a page reload is
necessary. If yes, it causes a reload (use
document.location.reload(true) to reload from the server);

There are still a number of details to solve, as to whether to open
the file url manually or via GM_openInTab, and to check if a reload
has been just triggered in order to prevent an infinite reload loop.
These are left as an exercise to the reader ;-)

esquifit

unread,
May 26, 2010, 1:58:19 AM5/26/10
to greasemon...@googlegroups.com

jyothi panidarapu

unread,
May 26, 2010, 2:35:24 AM5/26/10
to greasemon...@googlegroups.com
I have a small doubt.
if I load the text file on my local web server, can I read the value of it using GM_xmlhttprequest() ?
http://localhost/myfile.txt

On Wed, May 26, 2010 at 11:28 AM, esquifit <esqu...@googlemail.com> wrote:
--
You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
To post to this group, send email to greasemon...@googlegroups.com.
To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/greasemonkey-users?hl=en.

cc

unread,
May 26, 2010, 2:41:59 AM5/26/10
to greasemon...@googlegroups.com
Give it a go, it should work. (Also, in general: it's often faster just to try a naive test, and if it works, you're golden; asking the group takes longer and more of our time.)
Healthcare.com : Request Health Insurance Quotes Leading Health Insurance Providers
http://click.lavabit.com/?r=MTYyNjA5

-- 
cc | pseudonymous | <http://carlclark.mp/>

--
~ A clean house is a sign of a misspent life. ~ http://tagzilla.mozdev.org v0.066

jyothi panidarapu

unread,
May 26, 2010, 8:53:13 AM5/26/10
to greasemon...@googlegroups.com
I am including the script that I have written, please tell me if something is wrong.  I haven't installed yet, before that I have read up how to test it.


// ==UserScript==
// @key value
// @name : Reload the page if there is any change in Ip address of the system
// namespace
// @Description:
// @include http://*
// @include file://*
// ==/UserScript==

window.setInterval("checkIpChange()",2000); // Call the function every 2 seconds
var protocol= location.protocol;
var pattern= file:

function checkIpChange()
{
    protocol= location.protocol;
    if( protocol.match(pattern)
    {   
        window.location.reload();   
    }
    else
    {
        GM_xmlhttpRequest(
        {
            method: 'GET',
            url: 'http://localhost/readValue.txt',      // file  which contains the value
            headers:
            {   
                'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
                'Accept': 'application/atom+xml,application/xml,text/xml',
            },
            onload: function(responseDetails) //My text file entry would be either '0' or '1'
            {
                /*alert('Request for Atom feed returned ' + responseDetails.status + ' ' + responseDetails.statusText + '\n\n' +
                    'Feed data:\n' + responseDetails.responseText);*/
            change= responseDetails.responseText ;
            if(change==1)
            {
                window.location.reload();
            }
            else
            {
                //Do Nothing
            }
       

            }
        }
        );
    }
}



Thanks
Jyoti

jyothi panidarapu

unread,
May 29, 2010, 11:44:02 AM5/29/10
to greasemon...@googlegroups.com
I have installed and tried it. There was no affect after installation. Can somebody tell me what's wrong with it?

cc

unread,
May 29, 2010, 12:16:55 PM5/29/10
to greasemon...@googlegroups.com
On 2010-05-29 08:44, jyothi panidarapu wrote:
I have installed and tried it. There was no affect after installation. Can somebody tell me what's wrong with it?

On Wed, May 26, 2010 at 6:23 PM, jyothi panidarapu <jyothi.p...@gmail.com> wrote:
I am including the script that I have written, please tell me if something is wrong.  I haven't installed yet, before that I have read up how to test it.


// ==UserScript==
// @key value
// @name : Reload the page if there is any change in Ip address of the system
// namespace
// @Description:
// @include http://*
// @include file://*
// ==/UserScript==

window.setInterval("checkIpChange()",2000); // Call the function every 2 seconds
This line should be
    window.setInterval(checkIpChange,2000); // Call the function every 2 seconds
as otherwise it will try to call an undefined function. (See http://wiki.greasespot.net/Avoid_Common_Pitfalls_in_Greasemonkey for more detail, specifically the Auto-Eval Strings section.)

var protocol= location.protocol;
var pattern= file:

Not sure what this line is trying to do, exactly. Maybe something got left out in copy+paste?


function checkIpChange()
{
    protocol= location.protocol;
    if( protocol.match(pattern)
    {   
        window.location.reload();   
    }
    else
    {
        GM_xmlhttpRequest(
        {
            method: 'GET',
            url: 'http://localhost/readValue.txt',      // file  which contains the value
            headers:
            {   
                'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
                'Accept': 'application/atom+xml,application/xml,text/xml',

Are you really requesting Atom and XML? It seems like this would be more likely to require text/plain.


            },
            onload: function(responseDetails) //My text file entry would be either '0' or '1'
            {
                /*alert('Request for Atom feed returned ' + responseDetails.status + ' ' + responseDetails.statusText + '\n\n' +
                    'Feed data:\n' + responseDetails.responseText);*/
            change= responseDetails.responseText ;
            if(change==1)
            {
                window.location.reload();
            }
            else
            {
                //Do Nothing
            }
       

            }
        }
        );
    }
}



Thanks
Jyoti

On Wed, May 26, 2010 at 12:11 PM, cc <carl...@lavabit.com> wrote:
Give it a go, it should work. (Also, in general: it's often faster just to try a naive test, and if it works, you're golden; asking the group takes longer and more of our time.)


On 2010-05-25 23:35, jyothi panidarapu wrote:
I have a small doubt.
if I load the text file on my local web server, can I read the value of it using GM_xmlhttprequest() ?
http://localhost/myfile.txt

On Wed, May 26, 2010 at 11:28 AM, esquifit <esqu...@googlemail.com> wrote:
Here you can find some inspiration:

http://groups.google.com/group/greasemonkey-users/browse_thread/thread/21ad5af3c7cc4b00
-- 
cc | pseudonymous | <http://carlclark.mp/>

--
~ Smash forehead on keyboard to continue.... ~ http://tagzilla.mozdev.org v0.066

jyothi panidarapu

unread,
May 29, 2010, 1:25:44 PM5/29/10
to greasemon...@googlegroups.com
On Sat, May 29, 2010 at 9:46 PM, cc <carl...@lavabit.com> wrote:
On 2010-05-29 08:44, jyothi panidarapu wrote:
I have installed and tried it. There was no affect after installation. Can somebody tell me what's wrong with it?

On Wed, May 26, 2010 at 6:23 PM, jyothi panidarapu <jyothi.p...@gmail.com> wrote:
I am including the script that I have written, please tell me if something is wrong.  I haven't installed yet, before that I have read up how to test it.


// ==UserScript==
// @key value
// @name : Reload the page if there is any change in Ip address of the system
// namespace
// @Description:
// @include http://*
// @include file://*
// ==/UserScript==

window.setInterval("checkIpChange()",2000); // Call the function every 2 seconds
This line should be
    window.setInterval(checkIpChange,2000); // Call the function every 2 seconds
as otherwise it will try to call an undefined function. (See http://wiki.greasespot.net/Avoid_Common_Pitfalls_in_Greasemonkey for more detail, specifically the Auto-Eval Strings section.)
Okay I will look into it.

var protocol= location.protocol;
var pattern= file:

Not sure what this line is trying to do, exactly. Maybe something got left out in copy+paste?


function checkIpChange()
{
    protocol= location.protocol;
    if( protocol.match(pattern)
    {   
        window.location.reload();   
    }
    else
    {
        GM_xmlhttpRequest(
        {
            method: 'GET',
            url: 'http://localhost/readValue.txt',      // file  which contains the value
            headers:
            {   
                'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
                'Accept': 'application/atom+xml,application/xml,text/xml',

Are you really requesting Atom and XML? It seems like this would be more likely to require text/plain.

No, I just want to access the text.

--
You received this message because you are subscribed to the Google Groups "greasemonkey-users" group.
To post to this group, send email to greasemon...@googlegroups.com.
To unsubscribe from this group, send email to greasemonkey-us...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/greasemonkey-users?hl=en.

jyothi panidarapu

unread,
May 30, 2010, 12:59:44 AM5/30/10
to greasemon...@googlegroups.com
Following is the modified code, still it didn't work. This alert box is not popping out. I am using firefox 3.5.3.

Do these API's work for this version of firefox?

// ==UserScript==
// @key value
// @name : Reload the page if there is any change in Ip address of the system
// namespace
// @Description:
// @include http://*
// @include file://*
// ==/UserScript==

window.setInterval("checkIpChange()",2000); // Call the function every 2 seconds

function checkIpChange()

{
GM_xmlhttpRequest(
{
method: 'GET',
url: 'http://localhost/readValue.txt',

		    headers: 
{
'User-agent': 'Mozilla/3.5 (compatible) Greasemonkey',
'Accept': 'text/xml',

},
onload: function(responseDetails) //My text file entry would be either '0' or '1'
{
		        alert('Request for Atom feed returned ' + responseDetails.status + ' ' + responseDetails.statusText + '\n\n' +
'Feed data:\n' + responseDetails.responseText);

			change= responseDetails.responseText ;

cc

unread,
May 30, 2010, 1:22:50 AM5/30/10
to greasemon...@googlegroups.com
On 2010-05-29 21:59, jyothi panidarapu wrote:
Following is the modified code, still it didn't work. This alert box is not popping out. I am using firefox 3.5.3.

Do these API's work for this version of firefox?
// ==UserScript==
// @key value
// @name : Reload the page if there is any change in Ip address of the system
// namespace


// @Description: 
// @include http://*
// @include file://*
// ==/UserScript==



window.setInterval("checkIpChange()",2000); // Call the function every 2 seconds

As explained, this cannot work. Use this instead:
window.setInterval(checkIpChange, 2000); // Call the function every 2 seconds

function checkIpChange()
{
		GM_xmlhttpRequest(


		{
		    method: 'GET',
		    url: 'http://localhost/readValue.txt',


		    headers: 
		    {	
		        'User-agent': 'Mozilla/3.5 (compatible) Greasemonkey',


		        'Accept': 'text/xml',

I don't know why you're setting this Accept header this way... either leave it out entirely, or set it to something reasonable. XML just ain't it ;-) . Try this instead, for plain text:
		        'Accept': 'text/plain',
(Since this is running on the localhost, it's not likely to make much difference, if any, unless you set up an Apache instance or whatever to return different resource representations on different Accept header.)
Download MSN Messenger: Get MSN Messenger 2010 Instantly Includes 10,000 Bonus Smileys Free
http://click.lavabit.com/?r=MTYyNjQx
Reply all
Reply to author
Forward
0 new messages