Java HttpClient更改content-type的方法?

9 浏览
0 Comments

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'."}

我感到困惑,希望得到帮助。

0
0 Comments

问题原因:在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作为字符集解决了我的问题...谢谢你!

0
0 Comments

问题原因:使用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,我们可以灵活地发送不同格式的数据。

0