Я использую библиотеку 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");
}
});