- 页面请求文本数据
public String getContent(String url) {
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder().url(url).build();
Call call=okHttpClient.newCall(request);
String result=null;
try {
result=call.execute().body().string();
} catch (IOException e) {
System.out.println("request "+url+" error");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
GetPage getPage = new GetPage();
String url ="" ;
String content =getPage.getContent(url) ;
System.out.println("API调用结果");
System.out.println(content);
}
-
页面请求二进制数据
public byte[] getContent(String url) { OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Request.Builder().url(url).build(); Call call=okHttpClient.newCall(request); byte[] result=null; try { result=call.execute().body().byte(); } catch (IOException e) { System.out.println("request "+url+" error"); e.printStackTrace(); } return result; }
依赖:
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.1.0</version>
</dependency>
-
okhttp3中的post操作
- post表单数据
public String postContent(String url, Map<String, String> formData) { // okHttpClient 实例 OkHttpClient okHttpClient = new OkHttpClient(); //post方式提交的数据 Builder builder = new FormBody.Builder(); // 放入表单数据 for(String key: formData.keySet()) { builder.add(key,formData.get(key)); } // 构建 FormBody 对象 FormBody formBody = builder.build(); // 指定 post 方式提交FormBody Request request = new Request.Builder().url(url).post(formBody).build(); // 使用client去请求 Call call = okHttpClient.newCall(request); // 返回结果字符串 String result = null; try { // 获得返回结果 result = call.execute().body().string(); } catch (IOException e) { // 抓取异常 System.out.println("request " + url + " error . "); e.printStackTrace(); } return result; } public static void main(String[] args) { String url = ""; Map<String, String> formData = new HashMap(); formData.put("","" ); FormPoster poster = new FormPoster(); String content = poster.postContent(url, formData); System.out.println("API调用结果"); System.out.println(content); }
- postJSON数据
private static final MediaType JSON_TYPE=MediaType.parse("application/json; charset=utf-8");
public String postContent(String url, Map<String, String> datas) {
// okHttpClient 实例
OkHttpClient okHttpClient = new OkHttpClient();
// 数据对象转换成 json 格式字符串
String jsonString = JSON.toJSONString(datas);
//构建RequestBody对象
RequestBody requestBody = RequestBody.create(JSON_TYPE, jsonString);
//post方式提交的数据
Request request = new Request.Builder().url(url).post(requestBody).build();
// 使用client去请求
Call call = okHttpClient.newCall(request);
// 返回结果字符串
String result = null;
try {
// 获得返回结果
result = call.execute().body().string();
} catch (IOException e) {
// 抓取异常
System.out.println("request " + url + " error . ");
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String url ="" ;
Map<String, String> datas = new HashMap();
向datas里添加数据
String content = new JsonPoster().postContent(url,datas);
System.out.println("API调用结果");
System.out.println(content);
}
-
// 用 CookieJar 实现 cookie 的存储,便于登录后请求其它 URL 可以复用 private static final OkHttpClient okHttpClient = new OkHttpClient.Builder() .cookieJar(new CookieJar() { private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>(); @Override public void saveFromResponse(HttpUrl url, List<Cookie> cookies) { cookieStore.put("mtime.com", cookies); System.out.println("[saveFromResponse]url.host()=" + url.host()); } @Override public List<Cookie> loadForRequest(HttpUrl url) { System.out.println("[loadForRequest]url.host()=" + url.host()); List<Cookie> cookies = cookieStore.get("mtime.com"); return cookies != null ? cookies : new ArrayList<>(); } }) .build();
-
文档地址:https://ham.youkeda.com/articles/detail/5f3757fd5e205f30b2c2b1f9
-
Headers三大件:
-
User-Agent浏览器标识
-
Referer网页标识
-
Host域名标识
-
-
写入文本文件
// 文件对象 File file = new File("foo.txt"); // 写入内容 FileWriter fileWritter = new FileWriter(file); fileWritter.write(content); // 关闭 fileWritter.close();
-
写入二进制文件
// 文件对象 File file = new File("china-city-list.xlsx"); // 写文件 FileOutputStream fos = new FileOutputStream(file); fos.write(data); // 必须刷新并关闭 fos.flush(); fos.close();