I have a bit of Java code that attempts to send POST data over to t Django application. However, the view is simply never called. If I paste the same URL the java code hits into my browser, the Django view is called. I have no idea what I am missing, but something must be wrong with the Java write.
This is the Java function doing the write:
public void executeWrite(String requestUrl, JsonObject jsonObject)
{
DataInputStream input = null;
try
{
URL url;
HttpURLConnection urlConn;
DataOutputStream printout;
System.out.println(requestUrl);
// URL of CGI-Bin script.
url = new URL (requestUrl);
// URL connection channel.
urlConn = (HttpURLConnection)url.openConnection();
// Let the run-time system (RTS) know that we want input.
urlConn.setDoInput (true);
// Let the RTS know that we want to do output.
urlConn.setDoOutput (true);
// No caching, we want the real thing.
urlConn.setUseCaches (false);
// Specify the content type.
urlConn.setRequestMethod("POST");
urlConn.setRequestProperty("content-type","application/json; charset=utf-8");
OutputStreamWriter wr = new OutputStreamWriter(urlConn.getOutputStream());
wr.write(jsonObject.toString());
wr.flush();
wr.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
Now the requestURL passed into the function directly corresponds to the one for the Django view. The requestURL is:
http://127.0.0.1:8000/events/rest/33456/create
This is the Django Urlconfig:
(r'^events/rest/(?P<key>\d+)/create', 'events.views.restCreateEvent'),
Finally this is the view that never gets called by the Java code
@csrf_exempt
def restCreateEvent(request, key):
#doesn't really matter what is in here it never runs
So, what am I doing wrong that the POST request is never received by the Django sever? I’ve spent about 2 hours trying to figure it out and I can’t find any issues with the Java code. Clearly something is wrong though.
Make sure your view is csrf exempt since you are not sending the appropriate CSRF token from the Java request.