Я использую библиотеку 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. Ответное сообщение сообщает, что отправляется получение. Также как я могу проверить http-пакеты. 2. Какие параметры имеют эти исключения, которые необходимо поймать. Спасибо – Shino88
Для 1 вы должны исключить, что сервер отправляет неверное сообщение об ошибке, которое сбивает с толку ситуацию. Проверьте журнал доступа (если есть) на сервере или вы можете включить подробное ведение журнала в httpclient, чтобы просмотреть все данные, которые он отправляет по кабелю, или использовать инструмент для обнюхивания пакетов, например WireShark. –
Привет, спасибо за помощь. Я участвую в Uni, и у меня нет доступа к журналам сервера, которые я только что пробовал, но он грохнулся, и, честно говоря, я даже не знаю, что им нужно. Любые идеи о том, что это может быть. O и я продолжаю получать. Указанный метод HTTP не разрешен для ответа запрошенного ресурса (HTTP-метод GET не поддерживается этим URL-адресом) с сервера. – Shino88