gpt4 book ai didi

java - HTTP 客户端 - HTTP 405 错误 "Method not allowed"。我发送了 HTTP Post,但由于某种原因发送了 HTTP Get

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:01 24 4
gpt4 key购买 nike

我正在使用 apache 库。我创建了一个向 servlet 发送 post 请求的类。我已经为客户端设置了参数,并且创建了要发送的 HTTP post 对象,但由于某种原因,当我执行请求时,我得到一个响应,表示不支持 get 方法(这是真的,因为我只在 servlet 中创建了 dopost 方法)。似乎正在发送一个 get 请求,但我不知道为什么。 post 方法之前有效,但由于我没有设置协议(protocol)版本,我开始获取 http 错误 417“期望失败”,但我通过添加参数修复了此问题。

下面是我的类,您可以在其中看到正在创建和执行的 HTTPpost 对象。我有一个响应处理程序方法,但我将其从下面的代码中取出,因为它与我的问题无关。

由于返回的响应消息显示,我知道正在发送 HTTP GET。所请求的资源不允许指定的 HTTP 方法(此 URL 不支持 HTTP 方法 GET)。

提前致谢。

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() );
}
}


}

我尝试将允许 header 添加到请求中,但效果不佳,但我不确定我做得是否正确。下面是代码。

client.addRequestInterceptor(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
//request.addHeader("Allow", "POST");

}
});

最佳答案

  1. 您如何知道 HTTP GET 实际上正在发送?检查客户端发送的或服务器接收的 http 数据包会很有帮助
  2. 在构造 Post 的参数时捕获并吞下 UnsupportedEncodingException - 如果在设置参数时遇到此异常会发生什么?您今天的代码仍将尝试执行 POST

关于java - HTTP 客户端 - HTTP 405 错误 "Method not allowed"。我发送了 HTTP Post,但由于某种原因发送了 HTTP Get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2495135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com