私はApacheライブラリを使用しています。post リクエストをサーブレットに送信するクラスを作成しました。クライアントのパラメーターを設定し、送信するHTTPポストオブジェクトを作成しましたが、何らかの理由でリクエストを実行すると、getメソッドがサポートされていないという応答を受け取ります(これは、私が作成しただけの本当の原因です)私のサーブレットのdopostメソッド)。get リクエストが送信されているようですが、理由はわかりません。post メソッドは以前は機能していましたが、protocal バージョンを設定していないために http エラー 417 "Expectation Failed" が発生し始めましたが、パラメーターを追加してこれを修正しました。
以下は、HTTPpost オブジェクトが作成されて実行されるのを見る私のクラスです。応答ハンドラ メソッドがありますが、問題とは関係がないため、以下のコードから削除しました。
返された応答メッセージにより、HTTP GET が送信されていることがわかります。指定された HTTP メソッドは、要求されたリソースに対して許可されていません (HTTP メソッド GET は、この URL ではサポートされていません)。
前もって感謝します。
Ps私はアンドロイド用に開発しています。
public class HTTPrequestHelper {
private final ResponseHandler<String> responseHandler;
private static final String CLASSTAG = HTTPrequestHelper.class.getSimpleName();
private static final DefaultHttpClient client;
static{
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
params.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, HTTP.UTF_8);
///params.setParameter(CoreProtocolPNames.USER_AGENT, "Android-x");
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000);
params.setParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(
new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(
new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
client = new DefaultHttpClient(cm,params);
}
public HTTPrequestHelper(ResponseHandler<String> responseHandler) {
this.responseHandler = responseHandler;
}
public void performrequest(String url, String para)
{
HttpPost post = new HttpPost(url);
StringEntity parameters;
try {
parameters = new StringEntity(para);
post.setEntity(parameters);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BasicHttpResponse errorResponse =
new BasicHttpResponse(
new ProtocolVersion("HTTP_ERROR", 1, 1),
500, "ERROR");
try {
client.execute(post, this.responseHandler);
}
catch (Exception e) {
errorResponse.setReasonPhrase(e.getMessage());
try {
this.responseHandler.handleResponse(errorResponse);
}
catch (Exception ex) {
Log.e( "ouch", "!!! IOException " + ex.getMessage() );
}
}
}
許可ヘッダーをリクエストに追加しようとしましたが、うまくいきませんでしたが、私が正しくやっていたかどうかはわかりません。以下はコードです。
client.addRequestInterceptor(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
//request.addHeader("Allow", "POST");
}
});