下面列出了怎么用com.squareup.okhttp.RequestBody的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* 上传文件
* 也可以和数据post一起提交 监听progress
* @param requestBody
* @param uIchangeListener
*/
public void uploadPost2ServerProgress(Context context,String url, RequestBody requestBody,
MyCallBack myCallBack, final UIchangeListener uIchangeListener){
ProgressRequestBody progressRequestBody=ProgressHelper.addProgressRequestListener(requestBody, new UIProgressRequestListener() {
@Override
public void onUIRequestProgress(long bytesWrite, long contentLength, boolean done) {
uIchangeListener.progressUpdate(bytesWrite,contentLength,done);
}
});
Request request=new Request.Builder()
.tag(context)
.post(progressRequestBody)
.url(url)
.build();
postData2Server(request,myCallBack);
}
public byte[] postBytes(String url, byte[] bytes) throws IOException {
ResponseBody body = null;
try {
RequestBody postBody = RequestBody.create(JSON, bytes);
Request request = new Request.Builder().url(url).post(postBody).build();
Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
body = response.body();
byte[] res = body.bytes();
return res;
} else {
logger.error("http post error.{}", response.message());
}
} finally {
if (body != null) {
body.close();
}
}
return null;
}
public byte[] postBytes(String url, byte[] bytes) throws IOException {
ResponseBody body = null;
try {
RequestBody postBody = RequestBody.create(JSON, bytes);
Request request = new Request.Builder().url(url).post(postBody).build();
Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
body = response.body();
byte[] res = body.bytes();
return res;
} else {
logger.error("http post error.{}", response.message());
}
} finally {
if (body != null) {
body.close();
}
}
return null;
}
public Response postRequest(String url, String body, Headers headers)
throws TencentCloudSDKException {
MediaType contentType = MediaType.parse(headers.get("Content-Type"));
Request request = null;
try {
request =
new Request.Builder()
.url(url)
.post(RequestBody.create(contentType, body))
.headers(headers)
.build();
} catch (IllegalArgumentException e) {
throw new TencentCloudSDKException(e.getClass().getName() + "-" + e.getMessage());
}
return this.doRequest(request);
}
public Response postRequest(String url, byte[] body, Headers headers)
throws TencentCloudSDKException {
MediaType contentType = MediaType.parse(headers.get("Content-Type"));
Request request = null;
try {
request =
new Request.Builder()
.url(url)
.post(RequestBody.create(contentType, body))
.headers(headers)
.build();
} catch (IllegalArgumentException e) {
throw new TencentCloudSDKException(e.getClass().getName() + "-" + e.getMessage());
}
return this.doRequest(request);
}
public byte[] postBytes(String url, byte[] bytes) throws IOException {
ResponseBody body = null;
try {
RequestBody postBody = RequestBody.create(JSON, bytes);
Request request = new Request.Builder().url(url).post(postBody).build();
Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
body = response.body();
byte[] res = body.bytes();
return res;
} else {
logger.error("http post error.{}", response.message());
}
} finally {
if (body != null) {
body.close();
}
}
return null;
}
@Override
protected RequestBody buildRequestBody()
{
validParams();
RequestBody requestBody = null;
switch (type)
{
case TYPE_PARAMS:
FormEncodingBuilder builder = new FormEncodingBuilder();
addParams(builder, params);
requestBody = builder.build();
break;
case TYPE_BYTES:
requestBody = RequestBody.create(mediaType != null ? mediaType : MEDIA_TYPE_STREAM, bytes);
break;
case TYPE_FILE:
requestBody = RequestBody.create(mediaType != null ? mediaType : MEDIA_TYPE_STREAM, file);
break;
case TYPE_STRING:
requestBody = RequestBody.create(mediaType != null ? mediaType : MEDIA_TYPE_STRING, content);
break;
}
return requestBody;
}
/**
* Let user search access logs filtered by operations and date time
* ranges.</br>
* <b>URL</b>: /projects/{project_id}/logs/filter</br>
* <b>Method</b>: POST
*
* @param projectId
* [required] (Selected project ID)
* @param accessLog
* (Search results of access logs)
* @return
* @throws HarborClientException
* @throws IOException
*/
public List<Log> filterLog(int projectId, Log accessLog) throws HarborClientException, IOException {
List<Log> res = new ArrayList<>();
String url = baseUrl + "projects/" + projectId + "/logs/filter";
RequestBody requestBody = RequestBody.create(JSON, mapper.writeValueAsString(accessLog));
Request request = new Request.Builder().url(url).post(requestBody).build();
Response response = okhttpClient.newCall(request).execute();
logger.debug(String.format(REQUEST_RESPONSE_INFO, request, response));
switch (response.code()) {
case 200:
res = mapper.readValue(response.body().string(), new TypeReference<List<Log>>() {
});
break;
case 400:
throw new HarborClientException(String.valueOf(response.code()), "Illegal format of provided ID value.");
case 401:
throw new HarborClientException(String.valueOf(response.code()), "User need to log in first.");
case 500:
throw new HarborClientException(String.valueOf(response.code()), "Unexpected internal errors.");
default:
throw new HarborClientException(String.valueOf(response.code()), "Unknown.");
}
return res;
}
@Override
protected Void doInBackground(Void... params) {
try {
Request.Builder requestBuilder = new Request.Builder()
.url(serverAddr + urlPart);
switch (method) {
case PUT:
requestBuilder.put(RequestBody.create(MEDIA_TYPE_JSON, json));
break;
case POST:
requestBuilder.post(RequestBody.create(MEDIA_TYPE_JSON, json));
break;
case DELETE:
requestBuilder.delete(RequestBody.create(MEDIA_TYPE_JSON, json));
break;
default: break;
}
Request request = requestBuilder.build();
httpClient.newCall(request).enqueue(new HttpCallback(callback));
} catch (Exception e) {
Log.e(TAG, "IOException", e);
}
return null;
}
@Override
protected RequestBody wrapRequestBody(RequestBody requestBody, final ResultCallback callback)
{
CountingRequestBody countingRequestBody = new CountingRequestBody(requestBody, new CountingRequestBody.Listener()
{
@Override
public void onRequestProgress(final long bytesWritten, final long contentLength)
{
mOkHttpClientManager.getDelivery().post(new Runnable()
{
@Override
public void run()
{
callback.inProgress(bytesWritten * 1.0f / contentLength);
}
});
}
});
return countingRequestBody;
}
static Request buildRequest(HttpHeaders headers, byte[] content, URI uri, HttpMethod method)
throws MalformedURLException {
com.squareup.okhttp.MediaType contentType = getContentType(headers);
RequestBody body = (content.length > 0 ||
com.squareup.okhttp.internal.http.HttpMethod.requiresRequestBody(method.name()) ?
RequestBody.create(contentType, content) : null);
Request.Builder builder = new Request.Builder().url(uri.toURL()).method(method.name(), body);
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
String headerName = entry.getKey();
for (String headerValue : entry.getValue()) {
builder.addHeader(headerName, headerValue);
}
}
return builder.build();
}
@Override
protected Void doInBackground(Void... params) {
RequestBody requestBody = new FormEncodingBuilder()
.add("grant_type", "authorization_code")
.add("client_id", mClientId)
.add("client_secret", "ADD_YOUR_CLIENT_SECRET")
.add("redirect_uri","")
.add("code", mCode)
.build();
final Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
mOkHttpClient.newCall(request).enqueue(new HttpCallback(mCallBack));
return null;
}
@Override
protected RequestBody wrapRequestBody(RequestBody requestBody, final Callback callback)
{
if (callback == null) return requestBody;
CountingRequestBody countingRequestBody = new CountingRequestBody(requestBody, new CountingRequestBody.Listener()
{
@Override
public void onRequestProgress(final long bytesWritten, final long contentLength)
{
OkHttpUtils.getInstance().getDelivery().post(new Runnable()
{
@Override
public void run()
{
callback.inProgress(bytesWritten * 1.0f / contentLength);
}
});
}
});
return countingRequestBody;
}
private void addParams(MultipartBuilder builder, Map<String, String> params)
{
if (builder == null)
{
throw new IllegalArgumentException("builder can not be null .");
}
if (params != null && !params.isEmpty())
{
for (String key : params.keySet())
{
builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + key + "\""),
RequestBody.create(null, params.get(key)));
}
}
}
@Override
protected Void doInBackground(Void... params) {
try {
Request.Builder requestBuilder = new Request.Builder()
.url(serverAddr + urlPart);
switch (method) {
case PUT:
requestBuilder.put(RequestBody.create(MEDIA_TYPE_JSON, json));
break;
case POST:
requestBuilder.post(RequestBody.create(MEDIA_TYPE_JSON, json));
break;
case DELETE:
requestBuilder.delete(RequestBody.create(MEDIA_TYPE_JSON, json));
break;
default: break;
}
Request request = requestBuilder.build();
httpClient.newCall(request).enqueue(new HttpCallback(callback));
} catch (Exception e) {
Log.e(TAG, "IOException", e);
}
return null;
}
/**
* Serialize the given Java object into request body according to the object's
* class and the request Content-Type.
*
* @param obj The Java object
* @param contentType The request Content-Type
* @return The serialized request body
* @throws ApiException If fail to serialize the given object
*/
public RequestBody serialize(Object obj, String contentType) throws ApiException {
if (obj instanceof byte[]) {
// Binary (byte array) body parameter support.
return RequestBody.create(MediaType.parse(contentType), (byte[]) obj);
} else if (obj instanceof File) {
// File body parameter support.
return RequestBody.create(MediaType.parse(contentType), (File) obj);
} else if (isJsonMime(contentType)) {
String content;
if (obj != null) {
content = json.serialize(obj);
} else {
content = null;
}
return RequestBody.create(MediaType.parse(contentType), content);
} else {
throw new ApiException("Content type \"" + contentType + "\" is not supported");
}
}
/**
* https://github.com/square/okhttp/issues/350
*/
private RequestBody forceContentLength(final RequestBody requestBody) throws IOException {
final Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
return new RequestBody() {
@Override
public MediaType contentType() {
return requestBody.contentType();
}
@Override
public long contentLength() {
return buffer.size();
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.write(buffer.snapshot());
}
};
}
/**
* https://github.com/square/okhttp/issues/350
*/
private RequestBody forceContentLength(final RequestBody requestBody) throws IOException {
final Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
return new RequestBody() {
@Override
public MediaType contentType() {
return requestBody.contentType();
}
@Override
public long contentLength() {
return buffer.size();
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
sink.write(buffer.snapshot());
}
};
}
private RequestBody gzip(final RequestBody body) {
return new RequestBody() {
@Override
public MediaType contentType() {
return body.contentType();
}
@Override
public long contentLength() {
return -1; // We don't know the compressed length in advance!
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
BufferedSink gzipSink = Okio.buffer(new GzipSink(sink));
body.writeTo(gzipSink);
gzipSink.close();
}
};
}
@Test
public void testWithRequestCompression() throws IOException {
AtomicReference<NetworkEventReporter.InspectorRequest> capturedRequest =
hookAlmostRealRequestWillBeSent(mMockEventReporter);
MockWebServer server = new MockWebServer();
server.start();
server.enqueue(new MockResponse()
.setBody("Success!"));
final byte[] decompressed = "Request text".getBytes();
final byte[] compressed = compress(decompressed);
assertNotEquals(
"Bogus test: decompressed and compressed lengths match",
compressed.length, decompressed.length);
RequestBody compressedBody = RequestBody.create(
MediaType.parse("text/plain"),
compress(decompressed));
Request request = new Request.Builder()
.url(server.getUrl("/"))
.addHeader("Content-Encoding", "gzip")
.post(compressedBody)
.build();
Response response = mClientWithInterceptor.newCall(request).execute();
// Force a read to complete the flow.
response.body().string();
assertArrayEquals(decompressed, capturedRequest.get().body());
Mockito.verify(mMockEventReporter)
.dataSent(
anyString(),
eq(decompressed.length),
eq(compressed.length));
server.shutdown();
}
public Request commentOnStoryRequest(String itemId, String comment, String hmac) {
RequestBody requestBody = (new FormEncodingBuilder())
.add("parent", itemId)
.add("goto", (new StringBuilder()).append("item?id=").append(itemId).toString())
.add("text", comment)
.add("hmac", hmac)
.build();
return createAuthRequest(requestBody);
}
static String postKV(String url) throws IOException {
RequestBody formBody = new FormEncodingBuilder().add("platform", "android").add("name", "bug").build();
Request request = new Request.Builder().url(url).post(formBody).build();
Response response = client.newCall(request).execute();
System.out.println("post KV response =" + response.isSuccessful());
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
static String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder().url(url).post(body).build();
Response response = client.newCall(request).execute();
System.out.println("response = " + response.isSuccessful());
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
private Request createAuthRequest(RequestBody requestBody) {
return (new Request.Builder())
.addHeader("cookie", (new StringBuilder()).append("user=").append(loginSharedPreferences.getCookie()).toString())
.url(ConnectionProvider.BASE_URL + ConnectionProvider.SEND_COMMENT_BASE_URL)
.post(requestBody)
.build();
}
public static String post(String url, String json){
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
Log.e("ZYKJ",e.getMessage());
}
return "";
}
public static Request getJsonPostRequest(String url, JSONObject holder) {
return new Request.Builder()
.url(url)
.addHeader("Content-type", "application/json")
.post(RequestBody.create(MediaType.parse("application/json"), holder.toString()))
.build();
}
static String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder().url(url).post(body).build();
Response response = client.newCall(request).execute();
System.out.println("response = " + response.isSuccessful());
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
private void newRequestCall(Callback callback, String url, RequestBody requestBody) {
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(callback);
}
private Request buildPostRequest(HttpUrl httpUrl, MediaType mediaType, String content) {
return new Request.Builder()
.url(httpUrl)
.addHeader("Content-Type", mediaType.toString())
.addHeader("Authorization", token)
.addHeader("User-Agent", "swaggerhub-gradle-plugin")
.post(RequestBody.create(mediaType, content))
.build();
}
/**
* For user to create a new project.</br>
* <b>URL</b>: /projects</br>
* <b>Method</b>: POST
*
* @param project
* [required] (New created project)
* @return
* @throws IOException
*/
public HarborResponse createProject(Project project) throws IOException {
HarborResponse result = new HarborResponse();
String res;
String url = baseUrl + "projects";
RequestBody requestBody = RequestBody.create(JSON, mapper.writeValueAsString(project));
Request request = new Request.Builder().url(url).post(requestBody).build();
Response response = okhttpClient.newCall(request).execute();
logger.debug(String.format(REQUEST_RESPONSE_INFO, request, response));
switch (response.code()) {
case 201:
res = "Project created successfully.";
break;
case 400:
res = "Unsatisfied with constraints of the project creation.";
break;
case 401:
res = "User need to log in first.";
break;
case 409:
res = "Project name already exists.";
break;
case 500:
res = "Unexpected internal errors.";
break;
default:
res = "Unknown.";
break;
}
result.setCode(Integer.toString(response.code()));
result.setMessage(res);
return result;
}