gpt4 book ai didi

Java HttpClient 改变内容类型?

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:00 25 4
gpt4 key购买 nike

我正在为我的 Android 手机构建一个小应用程序,以使用非常基本的 REST 界面将文本消息转发到网络服务器。

我正在使用 android 4.0.3 SDK。我使用 Django 和 Django restframework 包在 python 中开发了 web 服务。该设置完全开箱即用。基本上有一个端点接收包含消息信息(发件人、正文、日期)的 JSON 对象的 POST。我已经使用以下命令使用 cURL 测试了该服务:

curl -X POST -H 'Content-Type: application/json' --data '{"sender":"+xxxxxxxx", "body": "test", "send_date":"2011- 03-20 16:32:02"}' http://[...]/messages.json

一切正常,我得到了预期的响应:

{"body": "test", "send_date": "2011-03-20T16:32:02", "id": 25, "sender": "+xxxxxxxxxx"

现在我设置了 Android 应用程序。它是一个包含私有(private) AsyncTask 类的简单 BroadcastReceiver 子类:

private class httpPost extends AsyncTask<String, Void, JSONObject> {
protected JSONObject doInBackground(String... args) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(myParams, 10000);
HttpConnectionParams.setSoTimeout(myParams, 10000);

String url = args[0];
String json=args[1];
JSONObject JSONResponse = null;
InputStream contentStream = null;
String resultString = "";

try {
HttpPost httppost = new HttpPost(url);
httppost.setHeader("Content-Type", "application/json");
httppost.setHeader("Accept", "application/json");

StringEntity se = new StringEntity(json);
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(se);

for (int i=0;i<httppost.getAllHeaders().length;i++) {
Log.v("set header", httppost.getAllHeaders()[i].getValue());
}

HttpResponse response = httpclient.execute(httppost);

// Do some checks to make sure that the request was processed properly
Header[] headers = response.getAllHeaders();
HttpEntity entity = response.getEntity();
contentStream = entity.getContent();

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(contentStream,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
contentStream.close();
resultString = sb.toString();
}catch(Exception e){
e.printStackTrace();
}

Log.v("log", resultString);
return new JSONObject();
}


}

如您所见,我刚刚开始熟悉 Java 和 android SDK,所以请多多包涵。这个设置实际上在我构建的另一个应用程序中运行良好,该应用程序将 JSON 字符串发送到 Neo4J web 服务。

问题是,当我通过 Android 将消息发布到我的网络服务时,内容类型有时会从“application/json”更改为“application/json, application/json”。 header 循环中的日志条目仍然为每个 header 输出正确的值,但是,网络服务返回此错误消息:

{“error”:“请求‘application/json,application/json’中不支持的媒体类型。”}

我很困惑,欢迎任何帮助。

最佳答案

改变这个:

StringEntity se = new StringEntity(json); 
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(se);

仅此:

httppost.setEntity(new StringEntity(json.toString(), HTTP.UTF_8));

关于Java HttpClient 改变内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10263854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com