Brent,

you can read the raw body of a POST using the variable request.body

mic


2013/4/19 Brent Zeiben <bzei...@tuheadz.com>

> Ok Thanks Niphlod
>
> Thought I could use json to prepare the data, using urllib.urlencode on
> the dictionary instead.  Didn't have to change the curl command.
>
> Thanks again.
>
> Brent
>
>
> On Friday, 19 April 2013 01:52:57 UTC-6, Niphlod wrote:
>>
>> uhm... I may be wrong but.... request.restful accepts the args as a
>> normal page, that is a application/x-www-form-**urlencoded or a
>> multipart/form-data . with curl would be something like curl -d
>> name=blablabla -d otherparameter=blablabla http://theurl
>>
>> On Friday, April 19, 2013 1:24:03 AM UTC+2, Brent Zeiben wrote:
>>>
>>> Hi,
>>> I am using a python script to organize some data and try to send it into
>>> web2py via the @request.restful() api.  In the python script the text is
>>> mainly input from a free form text field.  ( I believe some Unicode
>>> characters are in there as well, however I remove everything that is ord
>>> 128 and above.)
>>>
>>> My problem arises when the text contains an ampersand (&) and probably
>>> anything that isn't allowed in without the form encoding.  I thought python
>>> json would escape the character some way but it does not seem to.
>>>
>>> I am trying to use json to transfer this data to web2py via the curl
>>> command within python.
>>>
>>> Python Script
>>>
>>> import json
>>> import subprocess
>>>
>>>
>>> url = 
>>> 'http://127.0.0.1:8000/**testing/default/api/people.**json<http://127.0.0.1:8000/testing/default/api/people.json>
>>> '
>>> data = {"name":"My Full Name","biography":"Some simple information\n
>>> about me & blah blah blah"}
>>>
>>>
>>> jsondata = json.dumps(data)
>>> result = subprocess.Popen(['curl',
>>>    '--user','username:password',
>>>    '-d',
>>>    jsondata,
>>>    url], stderr=subprocess.PIPE,stdout=**subprocess.PIPE).communicate()*
>>> *[0]
>>>
>>>
>>>
>>>
>>>
>>> The web2py relevant parts
>>>
>>> db.py
>>>
>>> db.define_table('people',
>>>     Field('name','string',length=2**00,requires=IS_NOT_EMPTY()),
>>>     Field('biography','text'))
>>>
>>>
>>> default.py
>>>
>>>
>>> auth.settings.allow_basic_**login=True
>>> @auth.requires_login()
>>> @request.restful()
>>> def api():
>>>     response.view = 'generic.' + request.extension
>>>     def POST(table_name,**vars):
>>>         if table_name == 'people':
>>>             return db.people.validate_and_insert(****vars)
>>>         else:
>>>             raise HTTP(400)
>>>     return locals()
>>>
>>>
>>> So when the python script sends the data web2py complains because of the
>>> escaping issue with the & in the data.  I was doing some searching and
>>> thought that changing the Content Type in the curl command to
>>> application/json would help with this but then web2py has nothing in the
>>> vars variable.
>>>
>>> Thank you,
>>> Brent
>>>
>>  --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to