I\'m trying to do an HTTP Patch request from an Android application and haven\'t been able to figure it out. It looks like PATCH isn\'t supported by HTTPUrlConnection. HttpPat
It looks like OkHttp supports patch
Request request = Request.Builder().url().patch().build();
If the Patch method is absolutely necessary you will have to import the Apache HttpClient as a jar dependency. This will increase the size of your app somewhat but it should not be a huge problem.
As a workaround you could try to just include this java code in your app:
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.http.client.methods;
import java.net.URI;
import org.apache.http.annotation.NotThreadSafe;
/**
* HTTP PATCH method.
* <p>
* The HTTP PATCH method is defined in <a
* href="http://tools.ietf.org/html/rfc5789">RF5789</a>: <blockquote> The PATCH
* method requests that a set of changes described in the request entity be
* applied to the resource identified by the Request- URI. Differs from the PUT
* method in the way the server processes the enclosed entity to modify the
* resource identified by the Request-URI. In a PUT request, the enclosed entity
* origin server, and the client is requesting that the stored version be
* replaced. With PATCH, however, the enclosed entity contains a set of
* instructions describing how a resource currently residing on the origin
* server should be modified to produce a new version. </blockquote>
* </p>
*
* @since 4.2
*/
@NotThreadSafe
public class HttpPatch extends HttpEntityEnclosingRequestBase {
public final static String METHOD_NAME = "PATCH";
public HttpPatch() {
super();
}
public HttpPatch(final URI uri) {
super();
setURI(uri);
}
public HttpPatch(final String uri) {
super();
setURI(URI.create(uri));
}
@Override
public String getMethod() {
return METHOD_NAME;
}
}
Use HttpPost Call and set header as
Simply copy & paste this code
public static JSONObject makeRequestCheck(String hostname, String token,String proId,String taskGrpId, String taskId) throws Exception {
SSLSocketFactory sslFactory = new SimpleSSLSocketFactory(null);
sslFactory
.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
registry.register(new Scheme("https", sslFactory, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(params,
registry);
HttpClient client = new DefaultHttpClient(ccm, params);
String hostnamee = hostname+"projects/"+proId+"/taskgroups/"+taskGrpId+"/tasks/"+taskId+"/complete";
HttpPost httpost = new HttpPost(hostnamee);
System.out.println(hostnamee);
// StringEntity se = new StringEntity(jsonSignin.toString());
HttpResponse response = null;
try {
// httpost.setEntity(se);
httpost.setHeader("X-HTTP-Method-Override", "PATCH");
httpost.setHeader("Content-type", "application/json");
httpost.setHeader("Accept", "*/*");
httpost.setHeader("Accept-Encoding", "gzip, deflate");
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6");
httpost.setHeader("User-Agent", "nnst");
httpost.setHeader("Accept-Charset", "utf-8");
if (token == "NV") {
} else {
httpost.setHeader("Authorization", "Token" + " " + token);
}
response = client.execute(httpost);
} catch (Exception e) {
System.out.println("::my Exception ::" + e);
}
if (response == null) {
System.out.println("no data");
}
String output = EntityUtils.toString(response.getEntity());
JSONObject jobj = new JSONObject(output);
return jobj;
}
We created our own HttpPatch class like:
public class HttpPatch extends HttpPost {
public static final String METHOD_PATCH = "PATCH";
public HttpPatch(final String url) {
super(url);
}
@Override
public String getMethod() {
return METHOD_PATCH;
}
}