【问题标题】:Server cannot get binary data from Android app when using HttpPost使用 HttpPost 时服务器无法从 Android 应用程序获取二进制数据
【发布时间】:2014-08-04 23:37:53
【问题描述】:

我使用以下代码将二进制数据从 Android 应用程序发送到 CGI C++ 程序(在 AsyncTask 中的 doInBackground 中调用):

public static HttpResponse makeRequestPost(String uri, MyObject obj) {
    try {
        HttpPost httpPost = new HttpPost(uri);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        DataOutputStream dataStream = new DataOutputStream(stream);
        obj.writeRawObject(dataStream);
        byte[] byteArray = stream.toByteArray();
        ByteArrayEntity entity = new ByteArrayEntity(byteArray);
        entity.setContentType("application/octet-stream");
        entity.setChunked(true);
        httpPost.setEntity(entity);
        return new DefaultHttpClient().execute(httpPost);
    } catch (UnsupportedEncodingException e) {
        Log.e(TAG, "UnsupportedEncodingException. " + e.getMessage());
    } catch (ClientProtocolException e) {
        Log.e(TAG, "ClientProtocolException. " + e.getMessage());
    } catch (IOException e) {
        Log.e(TAG, "IOException. " + e.getMessage());
    }
    return null;
}

我使用 CURL 测试了同一台服务器,并将数据写入文件中:

obj.writeRawObject(dataStream);

此外,上述代码中的 byteArray 和实体变量在调用 execute(httpPost) 之前都包含正确的数据。

由于某种原因,在服务器端

 char* lenstr = getenv("CONTENT_LENGTH");

当我运行应用程序时返回 NULL。我尝试发送的数据从几个字节到 30 kB。无论大小,它都不会在服务器端获取它们。应用程序可以与服务器通信,但不附加二进制数据。这是我想念的东西吗?

这样的东西在 CURL 中起作用:

curl -i -H "Content-Type:application/octet-stream" -X POST --data-binary @file_with_my_obj.bin <url>

欣赏任何想法。

【问题讨论】:

  • 与其尝试从curl 直接跳转到android 应用程序,不如先编写一个普通的Java 应用程序并成功地让它与您的服务器通信,它可能会帮助您更好地调试。一旦这样做了,在 Android 上的调试就会容易得多。
  • 将其作为普通 Java 应用程序检查是个好主意。奇怪的是,问题出在 entity.setChunked(true);没有那条线,它工作正常。我不太明白为什么。

标签: java android c++ cgi


【解决方案1】:

您可以尝试在 setContentType 中使用 binary/octet-stream 代替 application/octet-stream 吗?

【讨论】:

  • 不应该有所作为。两种都试过了。如果我没有尝试一长串类似这样的相当愚蠢的事情,我不会问任何问题。
  • 恐怕我输入了类似的问题:stackoverflow.com/questions/15059240/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2018-03-03
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
相关资源
最近更新 更多