2010-03-22 3 views
0

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

ниже мой класс, где вы видите объект 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. Как вы знаете, что HTTP GET на самом деле отправляется? Изучение http-пакетов, отправленных вашим клиентом или полученных сервером, было бы полезно здесь
  2. Вы поймаете и проглатываете UnsupportedEncodingException при построении параметров Post - что произойдет, если вы столкнетесь с этим исключением при настройке параметров? Ваш код, как и сегодня, по-прежнему будет пытаться выполнить команду POST.
+0

1. Ответное сообщение сообщает, что отправляется получение. Также как я могу проверить http-пакеты. 2. Какие параметры имеют эти исключения, которые необходимо поймать. Спасибо – Shino88

+0

Для 1 вы должны исключить, что сервер отправляет неверное сообщение об ошибке, которое сбивает с толку ситуацию. Проверьте журнал доступа (если есть) на сервере или вы можете включить подробное ведение журнала в httpclient, чтобы просмотреть все данные, которые он отправляет по кабелю, или использовать инструмент для обнюхивания пакетов, например WireShark. –

+0

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

Смежные вопросы