OkHttpClient发起http请求

本文展示了如何在Java中使用OkHttpClient进行HTTP请求,包括GET和POST方法的实现,设置请求超时时间,以及处理响应。同时提到了可以进行异步请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用OkHttpClient首先需要导入依赖

        <dependency>
              <groupId>com.squareup.okhttp3</groupId>
              <artifactId>okhttp</artifactId>
              <version>3.4.1</version>
        </dependency>

接下来展示发起请求代码部分。

  1. GET请求
 /**
     * 地址逆解析
     * @param mapStr
     * @return
     * @throws IOException
     */
    public String run(String mapStr) throws IOException {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(mapStr)
                .build();
        try (Response response = client.newCall(request).execute()) {
            System.out.println(response);
            String res = response.body().string();
            JSONObject pa=JSONObject.parseObject(res);
            JSONObject pas= JSONObject.parseObject(pa.getString("result"));
            System.out.println("ressponse.body:"+res);
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("地理位置逆解析错误!");
        }
        return "";
    }
  1. POST请求
/**
     * 返回剩余流量
     * @param iccId
     * @return
     */
    public Double returnLeftFlow(String iccId){
        try{
            //发送查询请求
            String ip = "http://127.0.0.1:8801";
            String interfaceUrl = "/api/v1/card/base/flow/left/{"+ iccId +"}";
            Long now = System.currentTimeMillis();
            String appId = "test";
            String appKey = "test";
            //生成签名-sha1Hex
            String signBefore = interfaceUrl + now + appId + appKey;
            String signAfter = DigestUtils.sha1Hex(signBefore);
            //请求路径
            String url = ip + interfaceUrl;

            //设置请求参数
            JSONObject paramObject = new JSONObject();
            paramObject.put("test", "test");
            //发送请求
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    //这里必须手动设置为json内容类型
                    .addHeader("appid", appId)
                    .addHeader("sign", signAfter)
                    .addHeader("timestamp", now+"")
                    .addHeader("content-type", "application/json")
                    //参数放到链接后面
                    .url(url)
                    //.post(okhttp3.RequestBody.create(MediaType.parse("application/json; charset=utf-8"), paramObject.toString()))
                    .build();
            Response response = client.newCall(request).execute();
            System.out.println(response);
            String res = response.body().string();
            System.out.println(res);
        }catch (Exception e){
            e.printStackTrace();
        }
        return 0.0;
    }

注:OkHttpClient可设置请求超时时间,放在静态代码块里边,防止重复加载

  static {
        httpClient = new OkHttpClient.Builder()
                //设置连接超时时间
                .connectTimeout(30, TimeUnit.SECONDS)
                //设置读取超时时间
                .readTimeout(30, TimeUnit.SECONDS)
                .build();
  }

还可以发送异步http请求,有需要可自行百度。

在Android中发起HTTP请求通常使用的是第三方库,因为Android SDK本身并不提供直接支持。其中最流行的库包括: 1. **Volley**:这是Google官方推荐的一个轻量级库,它封装了网络请求,并提供了缓存功能。你可以通过`RequestQueue`添加请求,然后监听其结果。 ```java // 创建RequestQueue实例 RequestQueue queue = Volley.newRequestQueue(this); // 发起GET请求 String url = "https://example.com/data"; StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // 处理响应数据 } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // 处理错误 } }); queue.add(request); ``` 2. **OkHttp**:这是一个非常强大的HTTP客户端,API更丰富,性能也更好。它的使用稍微复杂一些,但提供了更多的定制选项。 ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://example.com/data") .build(); client.newCall(request) .enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 错误处理 } @Override public void onResponse(Call call, Response response) throws IOException { // 处理响应 } }); ``` 3. **Retrofit**:它是基于OkHttp的高层次网络请求库,可以方便地定义RESTful API接口,并自动转换JSON数据到Java对象。 ```java // 定义接口 interface ApiService { @GET("data") Call<Data> getData(); } // 使用Retrofit创建服务 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService service = retrofit.create(ApiService.class); Call<Data> call = service.getData(); call.enqueue(new Callback<Data>() { ... }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值