Merge pull request #447 from xbynet/master

简化POST参数设置.
master
Yihua Huang 2017-03-17 07:06:46 +08:00 committed by GitHub
commit 11c32669b2
2 changed files with 37 additions and 5 deletions

View File

@ -29,6 +29,10 @@ public class Request implements Serializable {
* Store additional information in extras. * Store additional information in extras.
*/ */
private Map<String, Object> extras; private Map<String, Object> extras;
/**
* POST/GET param set
* */
private Map<String,String> params=new HashMap<String, String>();
/** /**
* Priority of the request.<br> * Priority of the request.<br>
@ -107,6 +111,21 @@ public class Request implements Serializable {
this.method = method; this.method = method;
} }
public Map<String, String> getParams() {
return params;
}
/**
* POST/GET
* */
public void setParams(Map<String, String> params) {
this.params = params;
}
/**
* POST/GET
* */
public void putParams(String key,String value) {
params.put(key,value);
}
@Override @Override
public String toString() { public String toString() {
return "Request{" + return "Request{" +

View File

@ -7,10 +7,12 @@ import org.apache.http.NameValuePair;
import org.apache.http.annotation.ThreadSafe; import org.apache.http.annotation.ThreadSafe;
import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -26,9 +28,7 @@ import us.codecraft.webmagic.utils.WMCollections;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.HashMap; import java.util.*;
import java.util.Map;
import java.util.Set;
/** /**
@ -162,13 +162,26 @@ public class HttpClientDownloader extends AbstractDownloader {
String method = request.getMethod(); String method = request.getMethod();
if (method == null || method.equalsIgnoreCase(HttpConstant.Method.GET)) { if (method == null || method.equalsIgnoreCase(HttpConstant.Method.GET)) {
//default get //default get
return RequestBuilder.get(); RequestBuilder requestBuilder=RequestBuilder.get();
if (request.getParams() != null) {
for (Map.Entry<String, String> entry : request.getParams().entrySet()) {
requestBuilder.addParameter(entry.getKey(), entry.getValue());
}
}
return requestBuilder;
} else if (method.equalsIgnoreCase(HttpConstant.Method.POST)) { } else if (method.equalsIgnoreCase(HttpConstant.Method.POST)) {
RequestBuilder requestBuilder = RequestBuilder.post(); RequestBuilder requestBuilder = RequestBuilder.post();
NameValuePair[] nameValuePair = (NameValuePair[]) request.getExtra("nameValuePair"); NameValuePair[] nameValuePair = (NameValuePair[]) request.getExtra("nameValuePair");
List<NameValuePair> allNameValuePair=new ArrayList<NameValuePair>();
if (nameValuePair != null && nameValuePair.length > 0) { if (nameValuePair != null && nameValuePair.length > 0) {
requestBuilder.addParameters(nameValuePair); allNameValuePair= Arrays.asList(nameValuePair);
} }
if (request.getParams() != null) {
for (String key : request.getParams().keySet()) {
allNameValuePair.add(new BasicNameValuePair(key, request.getParams().get(key)));
}
}
requestBuilder.setEntity(new UrlEncodedFormEntity(allNameValuePair, Charset.forName("utf8")));
return requestBuilder; return requestBuilder;
} else if (method.equalsIgnoreCase(HttpConstant.Method.HEAD)) { } else if (method.equalsIgnoreCase(HttpConstant.Method.HEAD)) {
return RequestBuilder.head(); return RequestBuilder.head();