1

我目前正在开发一个需要与服务器交互的应用程序,但我在通过 POST 接收数据时遇到问题。我正在使用 Django,然后我从简单视图中收到的是:

<QueryDict: {u'c\r\nlogin': [u'woo']}>

它应该是{'login': 'woooow'}

观点只是:

def getDataByPost(request):
    print '\n\n\n'
    print request.POST    
    return HttpResponse('')

以及我在 sdk 上的 src 文件中所做的事情:

URL url = new URL("http://192.168.0.148:8000/data_by_post");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
String parametros = "login=woooow";

urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    urlConnection.setRequestProperty("charset","utf-8");
urlConnection.setRequestProperty("Content-Length", "" + Integer.toString(parametros.getBytes().length));

    OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8"));
writer.write(parametros);
writer.close();
os.close();

我更改了 Content-Length 以查看这是否是一个问题,然后解决了有关 login thw 值的问题,但它是通过硬编码(这并不酷)。

ps.:除了 QueryDict 之外的所有东西都运行良好。

我能做些什么来解决这个问题?我在我的 java 代码中编码有问题吗?谢谢!

4

1 回答 1

4

刚刚解决了我的问题,对参数进行了一些修改,还改变了一些其他的东西。

设置parameters为:

String parameters = "parameter1=" + URLEncoder.encode("SOMETHING","UTF-8");

然后,在 AsyncTask 下:

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
//not using the .setRequestProperty to the length, but this, solves the problem that i've mentioned
conn.setFixedLengthStreamingMode(params.getBytes().length);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

PrintWriter out = new PrintWriter(conn.getOutputStream());
out.print(params);
out.close();

String response = "";
Scanner inStream = new Scanner(conn.getInputStream());

while (inStream.hasNextLine()) {
    response += (inStream.nextLine());
}

然后,有了这个,我从 django 服务器得到了结果:

<QueryDict: {u'parameter1': [u'SOMETHING']}>

这就是我想要的。

于 2013-08-25T02:45:33.337 回答