1

私は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");

            }
         });
4

1 に答える 1

1
  1. HTTP GETaが実際に送信されていることをどのように知ることができますか? クライアントから送信された、またはサーバーによって受信された http パケットを調べると、ここで役立ちます
  2. Post のパラメーターを作成するときに UnsupportedEncodingException をキャッチして飲み込みます。パラメーターの設定中にこの例外に遭遇するとどうなりますか? 現在のコードは引き続きPOST.
于 2010-03-22T19:40:02.120 に答える