fixed bad request bug...

This commit is contained in:
jinyu 2015-12-15 12:06:50 +08:00
parent c1b6033ab3
commit 91eedeb27b
4 changed files with 58 additions and 43 deletions

View File

@ -60,39 +60,45 @@ public class HttpComponent3 extends AbstractHttpClient {
this.httpClient = httpClient; this.httpClient = httpClient;
} }
private org.apache.commons.httpclient.HttpMethod method2method( private org.apache.commons.httpclient.HttpMethod createHttpMethod(
HttpMethod method) { HttpMethod method, java.net.URI url) throws HttpClientException {
if (method == HttpMethod.GET) { org.apache.commons.httpclient.HttpMethod httpMethod = null;
return new GetMethod(); try {
} else if (method == HttpMethod.HEAD) { URI uri = new URI(url.toString(), false, Consts.UTF_8.name());
return new HeadMethod(); if (method == HttpMethod.GET) {
} else if (method == HttpMethod.POST) { httpMethod = new GetMethod();
return new PostMethod(); } else if (method == HttpMethod.HEAD) {
} else if (method == HttpMethod.PUT) { httpMethod = new HeadMethod();
return new PutMethod(); } else if (method == HttpMethod.POST) {
} else if (method == HttpMethod.DELETE) { httpMethod = new PostMethod();
return new DeleteMethod(); } else if (method == HttpMethod.PUT) {
} else if (method == HttpMethod.OPTIONS) { return new PutMethod();
return new OptionsMethod(); } else if (method == HttpMethod.DELETE) {
} else { httpMethod = new DeleteMethod();
return null; } else if (method == HttpMethod.OPTIONS) {
httpMethod = new OptionsMethod();
} else if (method == HttpMethod.TRACE) {
return new TraceMethod(uri.getEscapedURI());
} else {
throw new HttpClientException("unknown request method "
+ method + "for" + uri);
}
httpMethod.setURI(uri);
} catch (IOException e) {
throw new HttpClientException("I/O error on " + method.name()
+ " setURI for \"" + url.toString() + "\":"
+ e.getMessage(), e);
} }
return httpMethod;
} }
@Override @Override
public HttpResponse execute(HttpRequest request) throws HttpClientException { public HttpResponse execute(HttpRequest request) throws HttpClientException {
HttpResponse response = null; HttpResponse response = null;
try { try {
URI uri = new URI(request.getURI().toString(), false, org.apache.commons.httpclient.HttpMethod httpMethod = createHttpMethod(
Consts.UTF_8.name()); request.getMethod(), request.getURI());
org.apache.commons.httpclient.HttpMethod httpMethod = method2method(request boolean useSSL = "https".equals(request.getURI().getScheme());
.getMethod());
if (request.getMethod() == HttpMethod.TRACE) {
httpMethod = new TraceMethod(uri.getEscapedURI());
} else {
httpMethod.setURI(uri);
}
boolean useSSL = "https".equals(uri.getScheme());
SSLContext sslContext = null; SSLContext sslContext = null;
HttpParams params = request.getParams(); HttpParams params = request.getParams();
if (params != null) { if (params != null) {
@ -127,7 +133,7 @@ public class HttpComponent3 extends AbstractHttpClient {
headers = new HttpHeaders(); headers = new HttpHeaders();
} }
if (!headers.containsKey(HttpHeaders.HOST)) { if (!headers.containsKey(HttpHeaders.HOST)) {
headers.set(HttpHeaders.HOST, uri.getHost()); headers.set(HttpHeaders.HOST, request.getURI().getHost());
} }
// Add default accept headers // Add default accept headers
if (!headers.containsKey(HttpHeaders.ACCEPT)) { if (!headers.containsKey(HttpHeaders.ACCEPT)) {

View File

@ -3,10 +3,8 @@ package com.foxinmy.weixin4j.http.factory;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HostnameVerifier;
@ -29,6 +27,7 @@ import org.apache.http.entity.InputStreamEntity;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import com.foxinmy.weixin4j.http.AbstractHttpClient; import com.foxinmy.weixin4j.http.AbstractHttpClient;
import com.foxinmy.weixin4j.http.HttpClientException;
import com.foxinmy.weixin4j.http.HttpHeaders; import com.foxinmy.weixin4j.http.HttpHeaders;
import com.foxinmy.weixin4j.http.HttpMethod; import com.foxinmy.weixin4j.http.HttpMethod;
import com.foxinmy.weixin4j.http.apache.MultipartEntity; import com.foxinmy.weixin4j.http.apache.MultipartEntity;
@ -45,16 +44,26 @@ import com.foxinmy.weixin4j.util.StringUtil;
* @see * @see
*/ */
public abstract class HttpComponent4 extends AbstractHttpClient { public abstract class HttpComponent4 extends AbstractHttpClient {
protected static final Map<HttpMethod, HttpRequestBase> methodMap; protected HttpRequestBase createHttpRequest(HttpMethod method,
static { java.net.URI uri) throws HttpClientException {
methodMap = new HashMap<HttpMethod, HttpRequestBase>(); if (method == HttpMethod.GET) {
methodMap.put(HttpMethod.GET, new HttpGet()); return new HttpGet(uri);
methodMap.put(HttpMethod.HEAD, new HttpHead()); } else if (method == HttpMethod.HEAD) {
methodMap.put(HttpMethod.POST, new HttpPost()); return new HttpHead(uri);
methodMap.put(HttpMethod.PUT, new HttpPut()); } else if (method == HttpMethod.POST) {
methodMap.put(HttpMethod.DELETE, new HttpDelete()); return new HttpPost(uri);
methodMap.put(HttpMethod.OPTIONS, new HttpOptions()); } else if (method == HttpMethod.PUT) {
methodMap.put(HttpMethod.TRACE, new HttpTrace()); return new HttpPut(uri);
} else if (method == HttpMethod.DELETE) {
return new HttpDelete(uri);
} else if (method == HttpMethod.OPTIONS) {
return new HttpOptions(uri);
} else if (method == HttpMethod.TRACE) {
return new HttpTrace(uri);
} else {
throw new HttpClientException("unknown request method " + method
+ "for" + uri);
}
} }
protected void addHeaders(HttpHeaders headers, HttpRequestBase uriRequest) { protected void addHeaders(HttpHeaders headers, HttpRequestBase uriRequest) {

View File

@ -43,8 +43,8 @@ public class HttpComponent4_1 extends HttpComponent4 {
public HttpResponse execute(HttpRequest request) throws HttpClientException { public HttpResponse execute(HttpRequest request) throws HttpClientException {
HttpResponse response = null; HttpResponse response = null;
try { try {
HttpRequestBase uriRequest = methodMap.get(request.getMethod()); HttpRequestBase uriRequest = createHttpRequest(request.getMethod(),
uriRequest.setURI(request.getURI()); request.getURI());
boolean useSSL = "https".equals(request.getURI().getScheme()); boolean useSSL = "https".equals(request.getURI().getScheme());
SSLContext sslContext = null; SSLContext sslContext = null;
X509HostnameVerifier hostnameVerifier = null; X509HostnameVerifier hostnameVerifier = null;

View File

@ -41,8 +41,8 @@ public class HttpComponent4_2 extends HttpComponent4 {
public HttpResponse execute(HttpRequest request) throws HttpClientException { public HttpResponse execute(HttpRequest request) throws HttpClientException {
HttpResponse response = null; HttpResponse response = null;
try { try {
HttpRequestBase uriRequest = methodMap.get(request.getMethod()); HttpRequestBase uriRequest = createHttpRequest(request.getMethod(),
uriRequest.setURI(request.getURI()); request.getURI());
boolean useSSL = "https".equals(request.getURI().getScheme()); boolean useSSL = "https".equals(request.getURI().getScheme());
SSLContext sslContext = null; SSLContext sslContext = null;
X509HostnameVerifier hostnameVerifier = null; X509HostnameVerifier hostnameVerifier = null;