精华内容
下载资源
问答
  • 本文是小编给大家整理的在用java模拟http请求的时候遇到的错误问题整理,以及相关分析,有兴趣的朋友参考下。
  • Java 模拟http请求 亲测可用

    千次阅读 2017-03-09 09:30:57
    原创地址 http://www.cnblogs.com/vitre/p/5474166.html 注意 相关包路径 不要导错 package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java...

    原创地址  http://www.cnblogs.com/vitre/p/5474166.html

    注意 相关包路径 不要导错

    package ln;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 用于模拟HTTP请求中GET/POST方式 
     * @author landa
     *
     */
    public class HttpUtils {  
        /** 
         * 发送GET请求 
         *  
         * @param url 
         *            目的地址 
         * @param parameters 
         *            请求参数,Map类型。 
         * @return 远程响应结果 
         */  
        public static String sendGet(String url, Map<String, String> parameters) { 
            String result="";
            BufferedReader in = null;// 读取响应输入流  
            StringBuffer sb = new StringBuffer();// 存储参数  
            String params = "";// 编码之后的参数
            try {
                // 编码请求参数  
                if(parameters.size()==1){
                    for(String name:parameters.keySet()){
                        sb.append(name).append("=").append(
                                java.net.URLEncoder.encode(parameters.get(name),  
                                "UTF-8"));
                    }
                    params=sb.toString();
                }else{
                    for (String name : parameters.keySet()) {  
                        sb.append(name).append("=").append(  
                                java.net.URLEncoder.encode(parameters.get(name),  
                                        "UTF-8")).append("&");  
                    }  
                    String temp_params = sb.toString();  
                    params = temp_params.substring(0, temp_params.length() - 1);  
                }
                String full_url = url + "?" + params; 
                System.out.println(full_url); 
                // 创建URL对象  
                java.net.URL connURL = new java.net.URL(full_url);  
                // 打开URL连接  
                java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL  
                        .openConnection();  
                // 设置通用属性  
                httpConn.setRequestProperty("Accept", "*/*");  
                httpConn.setRequestProperty("Connection", "Keep-Alive");  
                httpConn.setRequestProperty("User-Agent",  
                        "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");  
                // 建立实际的连接  
                httpConn.connect();  
                // 响应头部获取  
                Map<String, List<String>> headers = httpConn.getHeaderFields();  
                // 遍历所有的响应头字段  
                for (String key : headers.keySet()) {  
                    System.out.println(key + "\t:\t" + headers.get(key));  
                }  
                // 定义BufferedReader输入流来读取URL的响应,并设置编码方式  
                in = new BufferedReader(new InputStreamReader(httpConn  
                        .getInputStream(), "UTF-8"));  
                String line;  
                // 读取返回的内容  
                while ((line = in.readLine()) != null) {  
                    result += line;  
                }  
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {  
                    if (in != null) {  
                        in.close();  
                    }  
                } catch (IOException ex) {  
                    ex.printStackTrace();  
                }  
            }
            return result ;
        }  
      
        /** 
         * 发送POST请求 
         *  
         * @param url 
         *            目的地址 
         * @param parameters 
         *            请求参数,Map类型。 
         * @return 远程响应结果 
         */  
        public static String sendPost(String url, Map<String, String> parameters) {  
            String result = "";// 返回的结果  
            BufferedReader in = null;// 读取响应输入流  
            PrintWriter out = null;  
            StringBuffer sb = new StringBuffer();// 处理请求参数  
            String params = "";// 编码之后的参数  
            try {  
                // 编码请求参数  
                if (parameters.size() == 1) {  
                    for (String name : parameters.keySet()) {  
                        sb.append(name).append("=").append(  
                                java.net.URLEncoder.encode(parameters.get(name),  
                                        "UTF-8"));  
                    }  
                    params = sb.toString();  
                } else {  
                    for (String name : parameters.keySet()) {  
                        sb.append(name).append("=").append(  
                                java.net.URLEncoder.encode(parameters.get(name),  
                                        "UTF-8")).append("&");  
                    }  
                    String temp_params = sb.toString();  
                    params = temp_params.substring(0, temp_params.length() - 1);  
                }  
                // 创建URL对象  
                java.net.URL connURL = new java.net.URL(url);  
                // 打开URL连接  
                java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL  
                        .openConnection();  
                // 设置通用属性  
                httpConn.setRequestProperty("Accept", "*/*");  
                httpConn.setRequestProperty("Connection", "Keep-Alive");  
                httpConn.setRequestProperty("User-Agent",  
                        "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");  
                // 设置POST方式  
                httpConn.setDoInput(true);  
                httpConn.setDoOutput(true);  
                // 获取HttpURLConnection对象对应的输出流  
                out = new PrintWriter(httpConn.getOutputStream());  
                // 发送请求参数  
                out.write(params);  
                // flush输出流的缓冲  
                out.flush();  
                // 定义BufferedReader输入流来读取URL的响应,设置编码方式  
                in = new BufferedReader(new InputStreamReader(httpConn  
                        .getInputStream(), "UTF-8"));  
                String line;  
                // 读取返回的内容  
                while ((line = in.readLine()) != null) {  
                    result += line;  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    if (out != null) {  
                        out.close();  
                    }  
                    if (in != null) {  
                        in.close();  
                    }  
                } catch (IOException ex) {  
                    ex.printStackTrace();  
                }  
            }  
            return result;  
        }  
      
        /** 
         * 主函数,测试请求 
         *  
         * @param args 
         */  
        public static void main(String[] args) {  
            Map<String, String> parameters = new HashMap<String, String>();  
            parameters.put("name", "sarin");  
            String result =sendGet("http://www.baidu.com", parameters);
            System.out.println(result); 
        }  
    }


    展开全文
  • Java模拟HTTP请求2

    千次阅读 2018-10-30 21:47:49
    之前转过一篇基于HttpClient的Java模拟HTTP请求,使用的第三方jar文件,这次升级JDK11之后模拟HTTP请求不需要再导入第三方jar文件了,官方扩展了java.net包,所有的HTTP请求相关类均位于java.net.http包内,示例代码...

    之前转过一篇基于HttpClient的Java模拟HTTP请求,使用的第三方jar文件,这次升级JDK11之后模拟HTTP请求不需要再导入第三方jar文件了,官方扩展了java.net包,所有的HTTP请求相关类均位于java.net.http包内,示例代码如下:

    package xyz.lsm1998.test;
    
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    
    /**
     * 作者:刘时明
     * 日期:2018/10/30
     * 时间:15:36
     * 说明:
     */
    public class HttpTest
    {
        public static void main(String[] args) throws Exception
        {
            // 建立一个请求对象,指定uri和请求类型(默认为GET)
            var request = HttpRequest.newBuilder()
                    .uri(URI.create("http://www.lsm1998.xyz"))
                    .GET()
                    .build();
            // 建立HttpClient对象
            var client = HttpClient.newHttpClient();
    
            // 模拟一次同步请求
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println(response.body());
    
            // 模拟一次异步请求
            HttpResponse<String> response2=client.sendAsync(request,HttpResponse.BodyHandlers.ofString()).get();
            System.out.println(response2.body());
        }
    }
    

    ps:注意环境为JDK11

    展开全文
  • curl java 模拟http请求

    万次阅读 2017-12-27 08:52:07
    curl java 模拟http请求

    项目需求java模拟http请求,获取dns解析 tcp连接等详细耗时信息。

    java api中提供的urlConnection 及apache提供的httpClient都不能胜任该需求,二次开发太费时间。于是google之。

    最后 得出两种解决办法:

    一是使用HTTP4J。

    该开源项目使用socket方式,模拟请求,记录时间戳,基本满足需求。对于header自定义等细节,可在此基础上比较方便的二次开发。只是,其中有一些bug需要修复,如https链接时获取不到ssl时间等。使用该项目的风险在于不稳定和不可控性。


    稍作改动后的http4j代码。

    http://download.csdn.net/detail/zhongyuan_1990/8837281


    二是使用curl。

    google之,curl本身没有对java的支持,由第三份提供了binding用来使用curl。可能是笔者能力有限,未能成功在windows编译它。google也没有找到相关javacurl.dll的资源下载。最后不得不放弃。选择使用命令行的模式操作curl。

    java 使用curl命令 demo

    [java]  view plain  copy
    1. package com.netbirdtech.libcurl.test;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.IOException;  
    5. import java.io.InputStreamReader;  
    6.   
    7. public class test {  
    8.     public static void main(String[] args) {  
    9.         String []cmds = {"curl""-i""-w""状态%{http_code};DNS时间%{time_namelookup};"  
    10.                 + "等待时间%{time_pretransfer}TCP 连接%{time_connect};发出请求%{time_starttransfer};"  
    11.                 + "总时间%{time_total}","http://www.baidu.com"};  
    12.         ProcessBuilder pb=new ProcessBuilder(cmds);  
    13.         pb.redirectErrorStream(true);  
    14.         Process p;  
    15.         try {  
    16.             p = pb.start();  
    17.             BufferedReader br=null;  
    18.             String line=null;  
    19.               
    20.             br=new BufferedReader(new InputStreamReader(p.getInputStream()));  
    21.             while((line=br.readLine())!=null){  
    22.                     System.out.println("\t"+line);  
    23.             }  
    24.             br.close();  
    25.         } catch (IOException e) {  
    26.             // TODO Auto-generated catch block  
    27.             e.printStackTrace();  
    28.         }  
    29.           
    30.     }  
    31. }  
    展开全文
  • java模拟HTTP请求,发送JSON数据

    千次阅读 2018-03-09 10:14:30
    1.使用HttpClient实现POST、GET请求的发送2.举例/***测试类*/public class Test{ public static void main(String[] args){ User u=new User(); u.setUserName="张三"; u.setUserPassWorld="zs...

    1.使用HttpClient实现POST、GET请求的发送

    2.举例

    /**

    *测试类

    */

    public class Test{

        public static void main(String[] args){

            User u=new User();

             u.setUserName="张三";

             u.setUserPassWorld="zs123321";

             Map<String,String> params = new HashMap<String,String>();

        params.put("data",JSON.toJSONString(u));

             String result_ = HttpClientUtils.sendHttpMethod(url, params, "post");

             if(StringUtils.isNotBlank()){

                UserResult resultObject=JSON.parseObject(result_,UserResult.class);

                if(resultObject!=null){

                  System.out.println("登陆结果:"+resultObject.getStatus);

                }

            }

         }

    }

    /**

    *Http请求工具类

    */

    public class HttpClientUtils{

        //单例 HttpClient 对象
    private static HttpClient httpClient = null;

        //返回 HttpClient 单个实例
    public static HttpClient getInstance() {
    if (httpClient == null) {
    httpClient = new HttpClient();
    //RFC_2109是支持较普遍的一个,还有其他cookie协议
    httpClient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
    }
    return httpClient;
    }

        public static String sendHttpMethod(String url,Map<String,String> params,String method){
    String returnValue = "";

    HttpClient client = HttpClientUtils.getInstance();

                               if("get".equals(method)){

    StringBuffer p = null;
    if(params!=null&&params.size()>0){
    p = new StringBuffer();
    for (String key : params.keySet()) {
    p.append(key+"="+params.get(key)+"&") ;
    }
    }
    if(p!=null&&p.length()>0){
    url = url + p.substring(0,p.length()-1);
    }
    GetMethod method_get = getMethod(url);
    int status;
    try {
    //指定传送字符集为UTF-8格式  
    client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
    status = client.executeMethod(method_get);
    if(status == 200){
    returnValue = method_get.getResponseBodyAsString();
    }
    } catch (Exception e) {
    System.out.println(url+"调用失败......");
    }
    }else if ("post".equals(method)) {
    List<NameValuePair> params_ = new ArrayList<NameValuePair>();
    for (String key : params.keySet()) {
    params_.add(new NameValuePair(key,params.get(key)));
    }
    try {

    returnValue = sendPostInfo(params, gateWay);

    System.out.println(returnValue);

    } catch (Exception e) {
    System.out.println(url+"调用失败......");
    }
    }
    return result;

    }

        //使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
    public static GetMethod getMethod(String url) {
    GetMethod getMethod = new GetMethod(url);
    //设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
    getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
           new DefaultHttpMethodRetryHandler()); 
    return getMethod;

    }

        public static List<NameValuePair> buildRequestPara(
    List<NameValuePair> sArray) {

    // 除去数组中的空值

            List<NameValuePair> result = new ArrayList<NameValuePair>();
             if (sArray == null || sArray.size() <= 0) {
                   return result;
               }
               for (NameValuePair nameValuePair : sArray) {
                    String value = nameValuePair.getValue();
                    if (value == null || value.equals("") 
                        || nameValuePair.getName().equalsIgnoreCase("sign_type")) {
                       continue;
                   }
                   result.add(new NameValuePair(nameValuePair.getName(), value));
              }
               return result;

    }

        /**
    * 构造模拟远程HTTP的POST请求,获取处理结果

    * @param sParaTemp
    *            请求参数数组
    * @param gateway
    *            网关地址
    * @return 处理结果
    * @throws Exception
    */
    public static String sendPostInfo(List<NameValuePair> sParaTemp,
    String gateway) throws Exception {
    // 待请求参数数组
    List<NameValuePair> sPara = buildRequestPara(sParaTemp);
    HttpProtocolHandler httpProtocolHandler = HttpProtocolHandler.getInstance();
    HttpRequest request = new HttpRequest(HttpResultType.BYTES);
    // 设置编码集
    request.setCharset("utf-8");
    request.setParameters(generatNameValuePair(sPara));
    request.setUrl(gateway);
    HttpResponse response = httpProtocolHandler.execute(request);
    if (response == null) {
    return null;
    }
    String strResult = response.getStringResult();
    return strResult;

    }

        private static NameValuePair[] generatNameValuePair(
    List<NameValuePair> properties) {
    NameValuePair[] nameValuePair = new NameValuePair[properties.size()];
    int i = 0;
    for (NameValuePair nvp : properties) {
    nameValuePair[i++] = new NameValuePair(nvp.getName(),
    nvp.getValue());
    }
    return nameValuePair;
    }

    }

    /**

    HttpProtocolHandler 是模拟HTTP请求的核心类,最主要的是execute这个执行HTTP请求的方法

    */

    public class HttpProtocolHandler {

    private static String DEFAULT_CHARSET = "utf-8";
    /** 连接超时时间,由bean factory设置,缺省为8秒钟 */
    private int defaultConnectionTimeout = 8000;
    /** 回应超时时间, 由bean factory设置,缺省为60秒钟 */
    private int defaultSoTimeout = 2 * 60000;
    /** 闲置连接超时时间, 由bean factory设置,缺省为60秒钟 */
    private int defaultIdleConnTimeout = 60000;
    private int defaultMaxConnPerHost = 30;
    private int defaultMaxTotalConn = 80;
    /** 默认等待HttpConnectionManager返回连接超时(只有在达到最大连接数时起作用):1秒 */
    private static final long defaultHttpConnectionManagerTimeout = 3 * 1000;
    /**
    * HTTP连接管理器,该连接管理器必须是线程安全的.
    */
    private HttpConnectionManager connectionManager;
    private static HttpProtocolHandler httpProtocolHandler = new HttpProtocolHandler();

    /**
    * 工厂方法

    * @return
    */
    public static HttpProtocolHandler getInstance() {
    return httpProtocolHandler;
    }

    /**
    * 私有的构造方法
    */
    private HttpProtocolHandler() {
    // 创建一个线程安全的HTTP连接池
    connectionManager = new MultiThreadedHttpConnectionManager();
    connectionManager.getParams().setDefaultMaxConnectionsPerHost(
    defaultMaxConnPerHost);
    connectionManager.getParams().setMaxTotalConnections(
    defaultMaxTotalConn);
    IdleConnectionTimeoutThread ict = new IdleConnectionTimeoutThread();
    ict.addConnectionManager(connectionManager);
    ict.setConnectionTimeout(defaultIdleConnTimeout);
    ict.start();
    }

    /**
    * 执行Http请求

    * @param request
    * @return
    */
    public HttpResponse execute(HttpRequest request) {
    HttpClient httpclient = new HttpClient(connectionManager);
    // 设置连接超时
    int connectionTimeout = defaultConnectionTimeout;
    if (request.getConnectionTimeout() > 0) {
    connectionTimeout = request.getConnectionTimeout();
    }
    httpclient.getHttpConnectionManager().getParams()
    .setConnectionTimeout(connectionTimeout);
    // 设置回应超时
    int soTimeout = defaultSoTimeout;
    if (request.getTimeout() > 0) {
    soTimeout = request.getTimeout();
    }
    httpclient.getHttpConnectionManager().getParams()
    .setSoTimeout(soTimeout);
    // 设置等待ConnectionManager释放connection的时间
    httpclient.getParams().setConnectionManagerTimeout(
    defaultHttpConnectionManagerTimeout);
    String charset = request.getCharset();
    charset = charset == null ? DEFAULT_CHARSET : charset;
    HttpMethod method = null;
    if (request.getMethod().equals(HttpRequest.METHOD_GET)) {
    method = new GetMethod(request.getUrl());
    method.getParams().setCredentialCharset(charset);
    // parseNotifyConfig会保证使用GET方法时,request一定使用QueryString
    method.setQueryString(request.getQueryString());
    } else {
    method = new PostMethod(request.getUrl());
    ((PostMethod) method).addParameters(request.getParameters());
    method.addRequestHeader("Content-Type",
    "application/x-www-form-urlencoded; text/html; charset="
    + charset);
    }
    // 设置Http Header中的User-Agent属性
    method.addRequestHeader("User-Agent", "Mozilla/4.0");
    HttpResponse response = new HttpResponse();
    try {
    httpclient.executeMethod(method);
    if (request.getResultType().equals(HttpResultType.STRING)) {
    response.setStringResult(method.getResponseBodyAsString());
    } else if (request.getResultType().equals(HttpResultType.BYTES)) {
    response.setByteResult(method.getResponseBody());
    }
    response.setResponseHeaders(method.getResponseHeaders());
    } catch (UnknownHostException ex) {
    return null;
    } catch (IOException ex) {
    return null;
    } catch (Exception ex) {
    return null;
    } finally {
    method.releaseConnection();
    }
    return response;
    }

    }

    未完待续....


    展开全文
  • 项目里碰到过模拟ajax请求的案例,研究了一下,觉得 httpClient 是真心好用,由于模拟环境搞了大半天,httpclient就另外再写博文吧 下面的例子介绍流的方式发送和接收,这个就有点暴力了,想传啥都行:以字节流的...
  • 主要介绍了java后台调用HttpURLConnection类模拟浏览器请求实例,该实例可用于接口调用,具有一定的实用价值,需要的朋友可以参考下
  • java实现动态切换上网IP (ADSL拨号上网) ...java模拟http的Get/Post请求 自动生成IP模拟POST访问后端程序 JAVA动态替换代理IP并模拟POST 转载于:https://www.cnblogs.com/straybirds/p/9213208.html...
  • Java模拟Http请求封装工具类

    万次阅读 2020-06-29 16:54:27
    封装一个简单的Http请求工具类,主要方便设置代理请求,无需额外框架 1、需要引入的jar包 <!-- 简化代码getter setter --> <dependency> <groupId>org.projectlombok</groupId> <...
  • Java模拟HTTP请求,带cookie

    万次阅读 2015-05-07 17:34:36
    import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURL
  • Java模拟http请求

    千次阅读 2018-08-24 14:37:40
    public class testJava { public static void main(String[] args) {...http://127.0.0.1:8080/updoc?cardNo=" + "123"; sendGet(url); } public static String sendGet(String url) { St...
  • java模拟http请求解析报文例子

    千次阅读 2019-08-01 11:15:25
    java模拟soap请求: // HttpClient发送SOAP请求 System.out.println("HttpClient 发送SOAP请求"); HttpClient client = new HttpClient(); PostMethod postMethod = new PostMethod(wsdl);...
  • package ... import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import jav...
  • java模拟http请求登陆抓取海投网信息送入到mysql数据库,特别注意的是需要配置mysql为gbk 或者utf-8
  • java 模拟http请求(跨域解决方案)

    千次阅读 2017-11-26 21:20:51
    "请求失败:" + response.getStatusLine()); status = 1 ; } //Read the response body body = EntityUtils.toString(response.getEntity(), "UTF-8" ); System. out .println(body); } catch ...
  • 关于curl java 模拟http请求

    万次阅读 多人点赞 2015-06-25 11:22:20
    近期笔者项目需求java模拟http请求,获取dns解析 tcp连接等详细耗时信息。 java api中提供的urlConnection 及apache提供的httpClient都不能胜任该需求,二次开发太费时间。于是google之。 最后 得出两种解决办法:...
  • 使用Java模拟http请求.rar使用Java模拟http请求.rar
  • public String sendPost(String url, Map dataMap) { String result = ""; HttpClient httpclient = new DefaultHttpClient();... HttpPost httpPost = new HttpPost(url); try { List params = new ArrayLi
  • 使用 浏览器直接访问 和java模拟http请求访问返回的数据不同, 两者有什么区别?
  • java模拟http请求header里加application/x-www-form-urlencoded的方式 public String post(String url,Map<String,String> map) { List<NameValuePair> urlParameters = new ArrayList<>(); ...
  • 主要介绍了java模拟发送form-data的请求方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Java发送http请求 (get 与 post方法请求) Java发送http请求 (get 与post方法请求),以下代码经本人亲自调试可用!可以直接使用之。 注意:通过BufferedReader 读取远程返回的数据时,必须设置读取编码,否则中文会...
  • Java发送Http请求,解析html返回
  • HTTP协议详解及Java模拟浏览器请求

    千次阅读 2018-09-19 18:07:10
    HTTP协议是什么? 所谓协议,就是规定,HTTP协议,就是HTTP规定。HTTP(Hypertext transfer protocol)超...HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HT...
  • 关于java模拟http请求的小错误

    千次阅读 2017-03-28 16:40:57
    java模拟http请求的时候,报错,代码,错误详情如下: Configuration.xml Java code String url = Configuration.getString("url.volumenormUrl"); try { log.info("==========
  • import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.List
  • 我现在需要在服务器端获取地理位置信息,因此我通过java程序模拟HTTP请求,去访问AAA.JSP,但因为ajax是异步的,模拟程序访问该页面的时候,其中的ajax方法还没执行结束,服务器就返回了该页面的静态HTML内容,导致...
  • java模拟http测试的中传参数要编码
  • java模拟发送json格式的http请求

    千次阅读 2018-11-19 21:20:12
    Java开发现在是前后端分离开发的,前台开发前台的, 后台开发后台的,于是后台需要自己调试自己的代码。 后台是spring+springMVC+mybatis开发的。请求的后台的controller。下面的代码。 原文:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,369
精华内容 39,747
关键字:

java模拟http请求

java 订阅