HTTP-клиент - ошибка HTTP 405 «Метод не разрешен».Я отправляю сообщение HTTP, но по какой-то причине отправлено сообщение HTTP Get - PullRequest
0 голосов
/ 22 марта 2010

Я использую библиотеку apache. Я создал класс, который отправляет почтовый запрос сервлету. Я настроил параметры для клиента, и я создал HTTP-объект post для отправки, но по какой-то причине, когда я выполняю запрос, я получаю отклик, который говорит, что метод get не поддерживается (это правда, потому что я только сделал метод допост в моем сервлете). Кажется, что запрос на получение отправляется, но я не знаю почему. Метод post работал раньше, но я начал получать HTTP-ошибку gettng 417 «Ожидание не выполнено» из-за того, что я не установил протокольную версию, но я исправил это, добавив параметры.

ниже - мой класс, в котором вы видите, как создается и обрабатывается объект HTTPpost. У меня есть метод обработчика ответа, но я взял его из моего кода ниже, потому что он не имеет ничего общего с моей проблемой.

Я знаю, что HTTP GET отправляется из-за сообщения об ответе, которое возвращается. Указанный метод HTTP не разрешен для запрошенного ресурса (метод HTTP GET не поддерживается этим URL).

Заранее спасибо.

P.s я разрабатываю для Android.

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

            }
         });

1 Ответ

1 голос
/ 22 марта 2010
  1. Откуда вы знаете, что HTTP GET на самом деле отправляется? Изучение http-пакетов, отправленных вашим клиентом или полученных сервером, будет полезно здесь
  2. Вы ловите и проглатываете UnsupportedEncodingException при построении параметров Поста - что произойдет, если вы встретите это исключение при настройке параметров? Ваш код, как сегодня, все еще будет пытаться выполнить POST.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...