Thanks, I got it to work after much of trial and error.

Here is the gist - https://gist.github.com/ratpik/5232763

Thanks,

Pratik

On Sunday, March 24, 2013 8:46:09 PM UTC+5:30, ke1g wrote:
>
> There are a couple of standard ways, IIRC, to encode post parameters, but 
> neither of them is JSON in the body.  Of course you can do as you want, and 
> android apparently does, but other software is unlikely to recognize it.
>
> Again, from memory, the two methods are using url encoding, and multi-part 
> form data.  The latter is particularly useful for large binary blobs (like 
> uploading files), but it looks as though the first method would work for 
> you.  You'll have to dig down into the android API to see how to do it 
> there, but it probably involves a particular value in the content-type 
> header.
>
> Bill
>
> On Sat, Mar 23, 2013 at 9:52 AM, Pratik Mandrekar 
> <[email protected]<javascript:>
> > wrote:
>
>> Thanks for the pdb tip Bill!
>>
>> I tried pdb at the point where the request enters Tastypie (based on 
>> http://stackoverflow.com/questions/13006901/tastypie-obj-create-method-not-being-called).
>>  
>> What I see is that the request.POST and request.raw_post_data are both 
>> empty. I posted from Android client to a posttestserver and I can see that 
>> all the headers I set and the request body are set.
>>
>> However it does say that there are no POST parameters. Here is the logged 
>> request - http://posttestserver.com/data/2013/03/23/06.42.591241431084. 
>> Any idea what that means? Note that I had to remove the authorization 
>> header to post to this server.
>>
>> Also I'm not sure now where else to start the trace from. Is there 
>> another place I can pdb trace my HTTP request when it enters the app? Is it 
>> possible some data gets stripped off the original request somewhere?
>>
>> Thanks.
>>
>> Pratik
>>
>>
>>
>>
>>
>>
>> On Saturday, March 23, 2013 5:50:28 PM UTC+5:30, ke1g wrote:
>>
>>> Still, if you have a break point where the request comes in to the view, 
>>> you can inspect the POST data to see how it differs from what you expect.  
>>> That might inform you as to what you might do differently in your 
>>> JavaScript, whether you need some additional or different encoding or 
>>> quoting of the data, whether you need to be more explicit about the 
>>> content-type header (you may have to look at the WSGI request object 
>>> itself), etc.  Or you may discover that you need to breakpoint at the WSGI 
>>> application script level to see what you need to see.
>>>
>>> Since nobody has jumped in with "I recognize that problem", inspecting 
>>> your data is probably a good use of your time.  pdb is not hard to use, as 
>>> long as you are using runserver (and you can almost always arrange to 
>>> explore a problem under runserver) because there has to be a console for 
>>> pdb to type on, and on which you can type commands.  The first breakpoint 
>>> is the only django specific trick.  Put
>>>
>>>     import pdb; pdb.set_trace()
>>>
>>> where you want to stop.  You can use the b command to set additional 
>>> breakpoints later, but that can be confusing due to threading.  pdb is 
>>> documented in the library reference for your python version at 
>>> python.org.  Read up on the p, pp, u, d, c, n, s, r, !, and q, 
>>> commands, probably in that order, and you will find that you usually only 
>>> use the first 5 of them.  (There are more, for when you want to be a pdb 
>>> expert.)  And remember to start with a p or pp when you want to see the 
>>> value of an expression, lest your expression be interpreted as one of the 
>>> other commands.
>>>
>>> Bill
>>>
>>> On Sat, Mar 23, 2013 at 5:19 AM, Pratik Mandrekar 
>>> <[email protected]>wrote:
>>>
>>>> The issue is with setting data in the http post request. I have tried 
>>>> it with curl and the web client and it works. CSRF is not the issue, 
>>>> requests work fine without the csrftoken outside of the android client.
>>>>
>>>> Pratik
>>>>
>>>>
>>>>
>>>> On Saturday, March 23, 2013 12:01:21 AM UTC+5:30, ke1g wrote:
>>>>
>>>>> Have you tried a breakpoint in the view?  Might it be a CSRF problem?
>>>>>
>>>>> On Fri, Mar 22, 2013 at 2:22 PM, Pratik Mandrekar <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I'm unable to get the POST json to tastypie from an android http 
>>>>>> client to work.
>>>>>>  
>>>>>> *I have tried with HttpURLConnection*
>>>>>>
>>>>>> urlConnection = (HttpURLConnection) url.openConnection();
>>>>>>
>>>>>>
>>>>>> urlConnection.setDoInput(true)******;
>>>>>>
>>>>>>  urlConnection.setDoOutput(**true****);
>>>>>>
>>>>>>  urlConnection.**setRequestProper****ty("Content-**Type", 
>>>>>> "application/json");
>>>>>>
>>>>>> byte [] encoded = 
>>>>>> Base64.encode((username+":"+**pa****ssword).getBytes("UTF-8"), 
>>>>>> Base64.DEFAULT); 
>>>>>>
>>>>>>  urlConnection.**setRequestProper****ty("**Authorization", "Basic "+ 
>>>>>> new String(encoded, "UTF-8"));
>>>>>>
>>>>>>
>>>>>> JSONObject jsonObject = new JSONObject();
>>>>>>
>>>>>> jsonObject.put("key1", "value1");
>>>>>>
>>>>>> jsonObject.put("key2", "value2");
>>>>>>
>>>>>>   outputStreamWriter = urlConnection.getOutputStream(******);
>>>>>>
>>>>>>  outputStreamWriter.write(**jsonO****bject.toString().**getBytes());
>>>>>>
>>>>>>  outputStreamWriter.flush(); 
>>>>>>
>>>>>>  
>>>>>>
>>>>>>
>>>>>> *And I have tried with Apache HttpClient*
>>>>>>
>>>>>> HttpClient client=new DefaultHttpClient();
>>>>>>
>>>>>> HttpPost post = new HttpPost(url);
>>>>>>
>>>>>>         
>>>>>>
>>>>>> post.setHeader("accept", "application/json");
>>>>>>
>>>>>> post.addHeader("Content-Type", "application/json");
>>>>>>
>>>>>> post.addHeader("Authorization"******, "Basic "+ new String(encoded, 
>>>>>> "UTF-8"));
>>>>>>
>>>>>>  
>>>>>>
>>>>>> ArrayList localArrayList = new ArrayList();
>>>>>>
>>>>>> localArrayList.add(new BasicNameValuePair("json",**json****
>>>>>> Object.toString()));
>>>>>>
>>>>>>        
>>>>>>
>>>>>>  lotlisting.setEntity(new UrlEncodedFormEntity(**localArra****
>>>>>> yList));
>>>>>>
>>>>>>   String str = EntityUtils.toString(**localDefa****ultHttpClient.**
>>>>>> execute(**lotlisti**ng).getEntity(**));
>>>>>>
>>>>>>
>>>>>> StringEntity se = new StringEntity( jsonObject.toString());  
>>>>>>
>>>>>> se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, 
>>>>>> "application/json"));
>>>>>>
>>>>>>                 
>>>>>>
>>>>>>  post.setEntity(se);
>>>>>>
>>>>>>                 
>>>>>>
>>>>>>  HttpResponse response = client.execute(post); 
>>>>>>
>>>>>>
>>>>>> I hit the same issue with both of them i.e the POST data as seen as 
>>>>>> Querydict in Django, does not have any data. This makes it an invalid 
>>>>>> json 
>>>>>> and it throws a JSON could not be decoded error.
>>>>>>
>>>>>> I have tried playing with all the parameters with little luck. Note 
>>>>>> that *get works perfectly*, even with parameters. 
>>>>>>
>>>>>> Has anyone been successfully able to post json from an android client 
>>>>>> to django/tastypie? If yes, could you please share what worked for you?
>>>>>>
>>>>>> Thanks.
>>>>>>
>>>>>> Pratik
>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "Django users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to django-users...@**googlegroups.**com.
>>>>>> To post to this group, send email to [email protected].
>>>>>>
>>>>>> Visit this group at http://groups.google.com/**group**
>>>>>> /django-users?hl=en<http://groups.google.com/group/django-users?hl=en>
>>>>>> .
>>>>>> For more options, visit 
>>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>>> .
>>>>>>  
>>>>>>  
>>>>>>
>>>>>
>>>>>  -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to django-users...@**googlegroups.com.
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at 
>>>> http://groups.google.com/**group/django-users?hl=en<http://groups.google.com/group/django-users?hl=en>
>>>> .
>>>> For more options, visit 
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>  
>>>>  
>>>>
>>>
>>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> Visit this group at http://groups.google.com/group/django-users?hl=en.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>  
>>  
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to