Java:将原始数据添加到有效负载Http Post请求中

时间:2013-11-20 10:58:50

标签: java http-post payload

我打算在Payload中发送一个带有大字符串的简单http post请求。

到目前为止,我有以下内容。

    DefaultHttpClient httpclient = new DefaultHttpClient();


    HttpPost httppost = new HttpPost("address location");

    String cred = "un:pw";

    byte[] authEncBytes = Base64.encodeBase64(cred.getBytes());
    String authStringEnc = new String(authEncBytes);



    httppost.setHeader("Authorization","Basic " + authStringEnc);

但是,我不知道如何将简单的RAW字符串附加到有效负载中。我能找到的唯一例子是实体中的名称值对,但这不是我想要的。

有任何帮助吗?

2 个答案:

答案 0 :(得分:9)

这取决于您使用的具体HTTP-API:

Commons HttpClient(old-end of life)

自HttpClient 3.0起,您可以为RequestEntity指定PostMethod

httpPost.setRequestEntity(new StringRequestEntity(stringData));

RequestEntity针对二进制数据的实现ByteArrayRequestEntitybyte[]FileRequestEntity从文件(自3.1起)和InputStreamRequestEntity中读取数据,可以从任何输入流中读取。

在3.0之前,您可以直接设置StringInputStream,例如a ByteArrayInputStream,作为请求正文:

httpPost.setRequestBody(stringData);

httpPost.setRequestBody(new ByteArrayInputStream(byteArray));

此方法现已弃用。

HTTP组件(新)

如果您使用较新的HTTP components API,方法,类和接口名称会有所改变,但概念是相同的:

httpPost.setEntity(new StringEntity(stringData));

其他Entity实施:ByteArrayEntityInputStreamEntityFileEntity,...

答案 1 :(得分:1)

我犯了一个常见的错误,json对象的序列错了。例如,我发送它像first_name,email..etc..where正确的序列是电子邮件,first_name

我的代码

boolean result = false;
    HttpClient hc = new DefaultHttpClient();
    String message;

HttpPost p = new HttpPost(url);
JSONObject object = new JSONObject();
try {

    object.put("updates", updates);
    object.put("mobile", mobile);
    object.put("last_name", lastname);
    object.put("first_name", firstname);
    object.put("email", email);

} catch (Exception ex) {

}

try {
message = object.toString();


p.setEntity(new StringEntity(message, "UTF8"));
p.setHeader("Content-type", "application/json");
    HttpResponse resp = hc.execute(p);
    if (resp != null) {
        if (resp.getStatusLine().getStatusCode() == 204)
            result = true;
    }

    Log.d("Status line", "" + resp.getStatusLine().getStatusCode());
} catch (Exception e) {
    e.printStackTrace();

}

return result;

Answer