我打算在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字符串附加到有效负载中。我能找到的唯一例子是实体中的名称值对,但这不是我想要的。
有任何帮助吗?
答案 0 :(得分:9)
这取决于您使用的具体HTTP-API:
Commons HttpClient(old-end of life)
自HttpClient 3.0起,您可以为RequestEntity
指定PostMethod
:
httpPost.setRequestEntity(new StringRequestEntity(stringData));
RequestEntity
针对二进制数据的实现ByteArrayRequestEntity
为byte[]
,FileRequestEntity
从文件(自3.1起)和InputStreamRequestEntity
中读取数据,可以从任何输入流中读取。
在3.0之前,您可以直接设置String
或InputStream
,例如a ByteArrayInputStream
,作为请求正文:
httpPost.setRequestBody(stringData);
或
httpPost.setRequestBody(new ByteArrayInputStream(byteArray));
此方法现已弃用。
HTTP组件(新)
如果您使用较新的HTTP components API,方法,类和接口名称会有所改变,但概念是相同的:
httpPost.setEntity(new StringEntity(stringData));
其他Entity
实施:ByteArrayEntity
,InputStreamEntity
,FileEntity
,...
答案 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;