HTTP Patch request from Android

后端 未结 4 411
清歌不尽
清歌不尽 2021-02-01 22:28

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

相关标签:
4条回答
  • 2021-02-01 23:04

    It looks like OkHttp supports patch

    Request request = Request.Builder().url().patch().build();
    
    0 讨论(0)
  • 2021-02-01 23:08

    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;
        }
    
    }
    
    0 讨论(0)
  • 2021-02-01 23:12

    Its amazing.Its working like a charm.

    Use HttpPost Call and set header as

    httpost.setHeader("X-HTTP-Method-Override", "PATCH");

    Or

    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;
    }
    
    0 讨论(0)
  • 2021-02-01 23:15

    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题