AndroidアプリケーションからHTTPパッチリクエストを実行しようとしていますが、理解できませんでした。PATCHはHTTPUrlConnectionでサポートされていないようです。HttpPatchはAndroidに含まれているライブラリに含まれていないようです(リンク)。何か案は?
質問する
13597 次
4 に答える
20
Patchメソッドがどうしても必要な場合は、ApacheHttpClientをjar依存関係としてインポートする必要があります。これによりアプリのサイズが多少大きくなりますが、大きな問題にはなりません。
回避策として、このJavaコードをアプリに含めることを試みることができます。
/*
* ====================================================================
* 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;
}
}
于 2012-08-31T00:47:11.127 に答える
14
次のような独自のHttpPatchクラスを作成しました。
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;
}
}
于 2013-09-09T10:49:33.707 に答える
5
OkHttpがパッチをサポートしているようです
Request request = Request.Builder().url().patch().build();
于 2014-10-01T18:30:44.023 に答える
2
その素晴らしい。それは魅力のように機能します。
HttpPost Callを使用し、ヘッダーを次のように設定します
httpost.setHeader( "X-HTTP-Method-Override"、 "PATCH");
または
このコードをコピーして貼り付けるだけです
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;
}
于 2015-07-17T11:35:32.603 に答える