因本人想做爬虫,抓取数据。但Python又不会短时间不想学。而且又是做Java出身。
一开始选apache 开源项目 httpclient请求
网站请求截图:
- 前提加入okhttp jar包,我用pom.xml maven方式引入
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.1</version>
</dependency>
用httpclient请求,这种写法不行。但json方式是可以的【指的是request payload 里面数据格式是json方式,不是指现在multipart/form-data方式】。
研究了之后果断用okhttp3,实现方式看下面
okhttp3 request payload post 请求方式:
研究了之后果断用okhttp3,实现方式看下面:
public static HttpDO postRequestPayLoad(String url, Map<String, String> param, Map<String, String> headers) {
HttpDO httpResult = new HttpDO();
Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
if (null != param && !param.isEmpty()) {
for (Entry<String, String> entry : param.entrySet()) {
builder.addFormDataPart(entry.getKey(), entry.getValue());
}
}
okhttp3.Request.Builder requestBuilder = new Request.Builder();
if (null != headers && !headers.isEmpty()) {
for (Entry<String, String> entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
}
RequestBody requestBody = builder.build();
Request request = requestBuilder.url(url).post(requestBody).build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
statusCode = response.code();
if (statusCode == 200 || response.isSuccessful()) {
responseResult = response.body().string();
}
} catch (Exception e) {
e.printStackTrace();
statusCode = 500;
responseResult = "请求错误,错误消息:" + e;
} finally {
httpResult.setStatusCode(statusCode);
httpResult.setContent(responseResult);
if (response != null) {
response.close();
}
}
return httpResult;
}