【发布时间】:2010-03-22 19:34:34
【问题描述】:
我正在使用 apache 库。我创建了一个向 servlet 发送发布请求的类。我已经为客户端设置了参数,并创建了一个要发送的 HTTP post 对象,但是由于某种原因,当我执行请求时,我得到一个回复,说不支持 get 方法(这是真的,因为我只做了我的 servlet 中的一个 dopost 方法)。似乎正在发送获取请求,但我不知道为什么。 post方法以前有效,但由于我没有设置协议版本,我开始gettng 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() );
}
}
}
我尝试将允许标头添加到请求中,但效果不佳,但我不确定我是否做得对。下面是代码。
client.addRequestInterceptor(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException {
//request.addHeader("Allow", "POST");
}
});
【问题讨论】:
标签: java web-services apache http httpclient