有没有人有关于从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;
}
答案 0 :(得分:0)
解决方案似乎比我想象的更简单:确保目标URL中有一个尾部斜杠。所以http://mydomain/api/26/
代替http://mydomain/api/26
。从Postman发送PUT请求时似乎并不重要,但是从Android中省略尾部斜杠似乎会导致请求被重定向,并且在此过程中它将变为GET。我认为潜在的问题是Apache HTTP客户端如何处理重定向,并且明确设置它也可能是值得的,但是现在只需添加斜杠即可。