找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2415|回复: 0

Android平台下使用OkHttp采集数据

[复制链接]

93

主题

6

回帖

113

积分

初中生

热心值
2
IT币
595
贡献值
1
QQ
发表于 2020-10-9 14:57:22 | 显示全部楼层 |阅读模式
OkHttp是Android普遍应用的Http第三方库,可以直接使用OkHttp模拟客户端请求,配合爬虫代理IP进行APP或WAP数据采集。 OkHttp的优势:
  • 套接字共享,连接池自动化管理减少请求延时。
  • 支持GZIP压缩,减少了下载数据带宽。
  • 响应缓存,提高了网络速度。
  • 自动dns多IP主机解析,实行多机负载均衡
数据采集过程中,目标网站会限制ip请求频率,因此需要使用爬虫代理,示例如下:
   import okhttp3.*;
   import java.io.IOException;
   import java.net.InetSocketAddress;
   import java.net.Proxy;
   import java.util.concurrent.TimeUnit;

   public class OkHttp {
       // 代理服务器(产品官网 www.16yun.cn)
       final static String proxyHost = "t.16yun.cn";
       final static Integer proxyPort = 31111;
       // 代理验证信息
       final static String proxyUser = "USERNAME";
       final static String proxyPass = "PASSWORD";
       static OkHttpClient client = null;

       static {
           Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));

           Authenticator proxyAuthenticator = new Authenticator() {
               public Request authenticate(Route route, Response response) {
                   String credential = Credentials.basic(proxyUser, proxyPass);
                   return response.request().newBuilder()
                           .header("Proxy-Authorization", credential)
                           .build();
               }
           };

           client = new OkHttpClient().newBuilder()
                   .connectTimeout(5, TimeUnit.SECONDS)
                   .readTimeout(5, TimeUnit.SECONDS)
                   .proxy(proxy)
                   .proxyAuthenticator(proxyAuthenticator)
                   .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS))
                   .build();
       }

       public static Response doGet() throws IOException {
           // 要访问的目标页面
           String targetUrl = "http://httpbin.org/ip";

           Request request = new Request.Builder()
                   .url(targetUrl)
                   .build();
           Response response = client.newCall(request).execute();
           return response;
       }

       public static void main(String[] args) throws IOException {
           Response response1 = doGet();
           System.out.println("GET请求返回结果:");
           System.out.println(response1.body().string());
       }

   }

ITbang.Net是一个IT教程分享社区!

寻找论坛资源请善用论坛搜索功能,这样会为你节约不少学习时间;

论坛资源如有过期链接失效等,请到教程反馈区发帖反馈,我们会为您良好的行为点赞加分!

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
IT帮论坛所发布的一切视频资源、工具软件和网络技术相关的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该资源,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:Service@ITbang.Net

QQ|Archiver|手机版|小黑屋|IT帮社区 ( 冀ICP备19002104号-2 )

GMT+8, 2025-5-4 00:41 , Processed in 0.059119 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表