使用okhttp发送http(post方法)

本文介绍了如何使用OkHttp库通过POST方法发送HTTP请求。主要内容包括在Android项目中添加OkHttp依赖、编写POST请求代码、处理返回数据等关键步骤。适合初学者入门学习。

                一直想写博客来记录自己的学习状况,终于下定决心要来写这篇博客了。
最近一直在研究如何使用okhttp,现在终于可以发送了,哈哈。废话就不多说,接下来开始讲okhttp吧。目前主要讲如何通过post方法来发送http。此处有参考《第一行代码》

注意点一
               在使用okhttp之前,我们需要先在项目中添加okhttp的依赖。编辑app/build.gradle文件,在dependencies闭包中添加如下内容:
               dependencies {
               compile fileTree(dir: ‘libs’, include: [’*.jar’])
                androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2’, {
                exclude group: ‘com.android.support’, module: ‘support-annotations’
})
               compile ‘com.android.support:appcompat-v7:26.+’
                compile ‘com.android.support.constraint:constraint-layout:1.0.2’
                testCompile ‘junit:junit:4.12’
               compile’com.squareup.okhttp3:okhttp:3.4.1’
}

               添加上述依赖会自动下载两个库,一个是okhttp库,一个是okio库,后者是前者的通信基础。
注意点二
               做耗时的操作时要在一个子线程里写,如果写在主线程里,会卡死的。(这里描述得不是很好,欢迎大家来评论和指导)
注意点三
有关网络的操作都需要声明一下权限,因此我们需要在AndroidManifest.xml文件里加入权限声明,如下所示:
在这里插入图片描述

                下面我们来看一下okhttp的具体用法:
1)创建一个OkHttpClient的实列,如下所示:
               OkHttpClient client = new OkHttpClient();
2)创建一个RequestBody对象(存放待提交的参数),如下所示:
               RequestBody requestBody = new FormBody.Builder()
                .add(“username”,et_username.getText().toString())
//et_username.getText().toString()是获取et_username的内容
                .add(“password”,et_password.getText().toString())
                .build();
3)在Request.Builder中调用一下post()方法,并将RequestBody对象传入:
               Request request = new Request.Builder()
                .url(“http://118.89.217.225:8080/Proj18/login”)
                .post(requestBody)
                .build();

//此处的url是一个后台的地址
4)调用OkHttpClient的newCall()方法来创建一个Call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据,写法如下:
               Response response = client.newCall(request).execute();
//execute()同步请求,需要try和catch
//enqueue方法是异步请求
那如何得到返回的具体内容呢?具体写法如下:
                final String responseData = response.body().string();

这篇博客就写到这了,有说得不好或者不对的也希望大家来留言,给点建议。

我的demo(提取码:38sl)

在现代 Java 开发里,使用 OkHttp 发送 POST 请求是常见的与外部服务进行数据交互的方式。结合相关参考内容,实现方法如下: ### 1. 添加依赖 在项目的 `pom.xml` 中添加 OkHttp 依赖: ```xml <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.4.1</version> </dependency> ``` 此依赖能让项目使用 OkHttp 库来处理 HTTP 请求[^3]。 ### 2. 发送 POST 请求示例 以下为一个使用 OkHttp 发送 POST 请求并携带 JSON 数据的示例代码: ```java import okhttp3.*; import java.io.IOException; public class OkHttpUtil { public static String doPostHttpRequest(String url, String json) throws IOException { OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.get("application/json; charset=utf-8"); RequestBody body = RequestBody.create(json, JSON); Request request = new Request.Builder() .url(url) .post(body) .build(); try (Response response = client.newCall(request).execute()) { return response.body().string(); } } } ``` ### 3. 在 Controller 层使用示例 ```java import com.alibaba.fastjson.JSONObject; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api") public class OrderController { /** * 添加订单 */ @PostMapping("/addOrders") public Message addOrder(@RequestBody RegistrationOrder registrationOrder) { String url = "http://47.92.69.68:8888/chh/order/lockRoom"; JSONObject map = new JSONObject(); map.put("pmsTypeId", registrationOrder.getRo_type_id()); map.put("hotelCode", registrationOrder.getHi_id()); map.put("roomNo", registrationOrder.getRo_id()); map.put("orderCode", registrationOrder.getOr_id()); map.put("occupationId", registrationOrder.getRo_occupation_id()); try { String str = OkHttpUtil.doPostHttpRequest(url, map.toString()); System.out.println(JSONObject.parse(str)); // 处理业务逻辑 // registrationOrderService.addOrder(registrationOrder); } catch (IOException e) { e.printStackTrace(); } return Message.success(); } } ``` 在上述代码中,`OkHttpUtil` 类中的 `doPostHttpRequest` 方法封装了使用 OkHttp 发送 POST 请求的逻辑。在 `OrderController` 里,调用该方法发送 POST 请求并处理响应结果[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值