0

POST データを Django アプリケーションに送信しようとする Java コードが少しあります。ただし、ビューが呼び出されることはありません。Java コードがヒットしたのと同じ URL をブラウザに貼り付けると、Django ビューが呼び出されます。何が欠けているのかわかりませんが、Java の書き込みに何か問題があるに違いありません。

これは、書き込みを行う Java 関数です。

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();
    }
}

関数に渡される requestURL は、Django ビューのものに直接対応するようになりました。requestURL は次のとおりです。

http://127.0.0.1:8000/events/rest/33456/create

これは Django Urlconfig です。

(r'^events/rest/(?P<key>\d+)/create', 'events.views.restCreateEvent'),

最後に、これは Java コードによって呼び出されることのないビューです

@csrf_exempt 
def restCreateEvent(request, key):
    #doesn't really matter what is in here it never runs

では、POST リクエストが Django サーバーによって受信されないというのは、何が間違っているのでしょうか? 私はそれを理解しようとして約 2 時間を費やしましたが、Java コードに問題は見つかりません。明らかに何かが間違っています。

4

3 に答える 3

1

Java リクエストから適切な CSRF トークンを送信していないため、ビューがcsrf 免除であることを確認してください。

于 2012-08-04T20:40:19.417 に答える
0

私はcrsfのことが実際に問題だったと思います。Javaコードを少し変更したことを追加すると、うまくいきました。微妙なJavaエラーが何であったかはまだわかりません。これが実際のJavaコードです。

public void executeWrite(String requestUrl, JsonObject jsonObject)
{
    InputStreamReader  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();

        input = new InputStreamReader (urlConn.getInputStream ());
        String response = UserInterface.read(new BufferedReader(input));

        if(response.length() > 0)
        {
            System.out.println("Response:" + response);
        }

        input.close();
    }
    catch(IOException ex)
    {
        ex.printStackTrace();
    }
}
于 2012-08-04T21:20:26.283 に答える