Java HttpClient更改content-type的方法?
Java HttpClient更改content-type的方法?
我正在为我的Android手机构建一个小应用程序,使用一个非常基本的REST接口将短信转发到一个web服务器上。
我正在使用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应用程序。它是一个简单的BroadcastReceiver子类,包含一个私有的AsyncTask类:
private class httpPost extends AsyncTask{ protected JSONObject doInBackground(String... args) { // 创建一个新的HttpClient和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
正如你所看到的,我刚开始熟悉Java和Android SDK,请谅解。这个设置在我之前构建的另一个向Neo4J Web服务发送JSON字符串的应用程序中实际上运行良好。
问题是当我通过Android将消息发布到我的Web服务时,某些时候内容类型从“application/json”更改为“application/json, application/json”。头部循环的日志条目仍然输出每个头部的正确值,然而,Web服务返回了这个错误消息:
{"error": "Unsupported media type in request 'application/json, application/json'."}
我感到困惑,希望得到帮助。
问题原因:在Java HttpClient中,更改content-type的方式有误,导致问题发生。
解决方法:将代码修改为正确的方式,即使用se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
来设置content-type,并添加HTTP.UTF_8
作为字符集。
代码整理如下:
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));
感谢朋友的帮助!这就是我需要的所有内容。你说得对,谢谢你们,非常有帮助!添加HTTP.UTF_8
作为字符集解决了我的问题...谢谢你!
问题原因:使用Java HttpClient发送HTTP请求时,需要设置请求的Content-Type。然而,有时候我们需要更改默认的Content-Type,这就引发了问题。
解决方法:我们可以使用Java HttpClient库提供的方法来更改Content-Type。
具体代码如下:
import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; // 创建HttpPost对象 HttpPost httppost = new HttpPost("http://example.com/api/endpoint"); // 设置请求的Content-Type为"application/json" httppost.setEntity(new StringEntity(json.toString(), ContentType.APPLICATION_JSON));
通过上述代码,我们可以在发送POST请求时,将Content-Type更改为"application/json"。这样可以确保我们发送的数据是以JSON格式进行传输的。
以上就是关于Java HttpClient更改Content-Type的解决方法。通过设置请求的Content-Type,我们可以灵活地发送不同格式的数据。