【问题标题】:Android HttpPut to Django REST Framework - data not updatingAndroid HttpPut 到 Django REST 框架 - 数据未更新
【发布时间】:2015-01-17 10:50:52
【问题描述】:

有人对从 Android 向 Django REST Framework 发出 PUT 请求有什么建议吗?当我将下面的代码发布到我的 API 端点,指定要更新的记录(例如http://mydomain/api/26)时,我收到状态代码 200 和目标记录的 json 内容的响应,但没有任何内容被更新请求。相比之下,当我通过 Postman 或通过可浏览的 API 发出看似相同的请求时,它工作正常,给了我 200 响应和更新的 json 内容。同样,我可以毫无问题地使用几乎相同的 Android 代码向 API 发出 POST 请求。任何想法都会很棒。谢谢。

public static HttpResponse putJsonString(String jsonString, String targetUrl, Context context){
    HttpResponse result = null;
    try {
        HttpParams httpParameters = new BasicHttpParams();
        int timeoutConnection = 3000;
        HttpConnectionParams.setConnectionTimeout(httpParameters,
                timeoutConnection);
        int timeoutSocket = 3000;
        HttpConnectionParams
                .setSoTimeout(httpParameters, timeoutSocket);

        DefaultHttpClient httpclient = new DefaultHttpClient(
                httpParameters);
        HttpPut httpPut = new HttpPut(targetUrl);
        StringEntity se = new StringEntity(jsonString, "UTF-8");
        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                "application/json"));
        httpPut.setEntity(se);
        httpPut.setHeader("Accept", "application/json");
        httpPut.setHeader("Content-type", "application/json");
        httpPut.setHeader("Authorization", "Token " + PropertyHolder.getUserKey());
        Log.d("put", "put content: " + parseInputStream(context, httpPut.getEntity().getContent()));
        result = httpclient.execute(httpPut);
    } catch (UnsupportedEncodingException e) {
        Util.logError(context, TAG, "error: " + e);
    } catch (ClientProtocolException e) {
        Util.logError(context, TAG, "error: " + e);
    } catch (IOException e) {
        Util.logError(context, TAG, "error: " + e);
    }
    return result;
}

【问题讨论】:

    标签: android django django-rest-framework


    【解决方案1】:

    解决方案似乎比我想象的要简单:确保目标 URL 中有一个斜杠。所以http://mydomain/api/26/ 而不是http://mydomain/api/26。从 Postman 发送 PUT 请求时,这似乎无关紧要,但在 Android 中,省略尾部斜杠似乎会导致请求被重定向,并且在此过程中它变成了 GET。我认为根本问题是 Apache HTTP 客户端如何处理重定向,可能也值得明确设置,但现在只需添加斜线即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 2020-05-30
      • 1970-01-01
      • 2020-09-29
      • 2016-08-09
      • 2018-06-18
      相关资源
      最近更新 更多