关于如何发出HTTPPOST网络请求和如何发送http请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android中的OkHttp用于发出网络请求、Android网络请求(3)网络请
关于如何发出 HTTP POST 网络请求和如何发送http请求的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android中的OkHttp用于发出网络请求、Android网络请求(3) 网络请求框架OkHttp、Android:如何发出HTTP HEAD请求?、Cocos-JS HTTP网络请求等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 如何发出 HTTP POST 网络请求(如何发送http请求)
- Android中的OkHttp用于发出网络请求
- Android网络请求(3) 网络请求框架OkHttp
- Android:如何发出HTTP HEAD请求?
- Cocos-JS HTTP网络请求
如何发出 HTTP POST 网络请求(如何发送http请求)
Canonical
如何使用该POST
方法发出 HTTP 请求并发送一些数据?
我可以GET
提出请求,但我不知道如何提出POST
请求。
Android中的OkHttp用于发出网络请求
我正在尝试做的事情 ::
我正在尝试学习 Okhttp 在android中进行网络通话的用法
我做了什么 ::
- 我 在这里 阅读了他们的文档 __
- 我已经在项目中下载并添加了JAR
- 我从 这里 使用他们的示例代码 __
MyCode ::
MainActivity.java
import android.app.Activity;import android.os.Bundle;import android.util.Log;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.internal.http.Request;import com.squareup.okhttp.internal.http.Response; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Request request = new Request.Builder() .url("https://raw.github.com/square/okhttp/master/README.md") .build(); Response response = client.execute(request); Log.d("ANSWER", response.body().string()); } }
我面临的错误 ::
在这一行中,Response response = client.execute(request);
我收到以下错误消息:
客户无法解析为变量
如何解决这个问题!
{更新}
public class MainActivity extends Activity { OkHttpClient client = new OkHttpClient(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Request request = new Request.Builder() .url("https://raw.github.com/square/okhttp/master/README.md") .build(); Response response = client.execute(request); Log.d("ANSWER", response.body().string()); }}
现在我面临的错误是:
在行
Response response = client.execute(request);
中The methodexecute(Request) is undefined for the type OkHttpClient
答案1
小编典典类型OkHttpClient的execute(Request)方法未定义
您正在获取此异常,因为没有这样的方法。execute(Request
)OkHttpClient
。而是在Call
使用OkHttpClient
object
获得的object 上调用它,如下所示:
Call call = client.newCall(request); Response response = call.execute();
我认为你应该使用
Response response = client.newCall(request).execute();
代替 Response response = client.execute(request);
OkHttp文档
OkHttp博客
Android网络请求(3) 网络请求框架OkHttp
Android网络请求(3) 网络请求框架OkHttp
本节我们来讲解OkHtpp网络请求框架
什么是网络请求框架
在我的理解中,网络请求框架是为了方便我们更加便捷规范的进行网络请求所建的类,我们通过调用该类中的方法可以快速地进行网络请求,切帮我们封装好了一些数据的处理方法,方便我们用更少的代码去做更多的事。
Android常见的网络请求框架
在android开发中,除了java原生的HttpURLConnection,常见的网络请求框架有
OkHttp
Volley
Retrofit
HttpClient
这其中最好用的莫过于Retrofit了,但是Retrofit是在OkHttp基础上再次进行封装的,所以我们先了解OkHttp网络请求,这对于我们日后的安卓开发也是有着很大的帮助。
OkHttp进行四种请求
导入依赖
在项目文件下build.gradle(app)的dependencies中导入所需要的库
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.12.0'
这里我们使用3.12.0版本,如果需要使用其他版本,修改version版本号为自己想要的版本。
创建四种方法
GET
public static String get(String src){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建request请求
Request request = new Request.Builder()
.url(src)
.get()
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printstacktrace();
}
return string;
}
可以看出这些代码对比起java原生的HttpURLConnection请求来说,简短了很多,不再需要设置一些超时,IO流之类的操着,那么因为OkHttp封装时给定了默认值,这样就大大减少了我们的工作量,我们现在只需要发送请求获取响应数据就行了。
POST
public static String post(String src,String json){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建请求体
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 构建request请求
Request request = new Request.Builder()
.post(requestBody)
.url(src)
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printstacktrace();
}
return string;
}
可以看出,这里我们只是修改了.get为.post并且传入了请求体,等于只需要新构建一个请求体,将我们的要向服务端发送的数据加入其中即可,这里我们使用的时application/json的方式,其他方式在第二篇提过一下,感兴趣的可以自己查阅资料。
PUT
put请求就更简单了,在原post请求中修改.post为.put即可,没有任何难度
public static String put(String src,String json){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建请求体
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 构建request请求
Request request = new Request.Builder()
.url(src)
.put(requestBody)
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printstacktrace();
}
return string;
}
DELETE
delete请求有两种不同的方式:携带参数与不携带参数。
携带参数:携带参数实在原post请求中将.post修改为.delete,一样的传入一个请求体即可
public static String delete(String src,String json){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建请求体
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 构建request请求
Request request = new Request.Builder()
.url(src)
.delete(requestBody)
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printstacktrace();
}
return string;
}
不携带参数则时在get请求上重写,将.get修改为.delete即可
public static String delete(String src){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建request请求
Request request = new Request.Builder()
.url(src)
.delete()
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printstacktrace();
}
return string;
}
相信经历过HttpURLConnection那复杂的网络请求设置后,OkHttp框架将会让你更加快乐的进行网络开发。
修改默认设置
上面我们说过,OkHttp默认帮我们配置好了设置,那么我们不想使用默认设置该怎么办呢。
我们可以在创建OkHttpClient类的时候使用链式调用的方式来设置默认的参数,如
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
// 一天
.connectTimeout(Duration.ofDays(1))
// 系统默认dns
.dns(Dns.SYstem)
.build();
Android:如何发出HTTP HEAD请求?
我怎么能在Android中做到这一点?
解决方法
正如njzk2建议的那样,使用HttpClient()它非常简单:
HttpResponse response = new HttpClient().execute(new HttpHead(myUrl));
但是,无法关闭连接存在问题.通常在HttpClient上,您将使用以下内容获取实体:
httpentity entity = response.getEntity();
然后你会得到来自实体的输入流
InputStream instream = entity.getContent(); ... instream.close();
通过关闭输入流,连接将关闭.
但是,在HEAD请求的情况下,实体似乎为空(可能是因为HEAD请求不返回响应中的主体),因此无法获取和关闭输入流,并且连接也不会关闭.
在他的答案的最后编辑中,njzk2建议使用androidhttpclient,这是HttpClient的最新实现(API 8),它实际上有一个close()方法.我没有用它,但我想它会正常工作.但是,正如Android开发团队所建议的那样,HttpUrlConnection应该是首选的Android客户端.
使用HttpUrlConnection:
实际上,使用HttpUrlConnection创建HEAD请求似乎很容易,并确保连接关闭:
HttpURLConnection urlConnection = null; System.setProperty("http.keepAlive","false"); try { URL url = new URL(stringUrl); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("HEAD"); urlConnection.getInputStream().close(); } catch (MalformedURLException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } finally { if (urlConnection != null) { urlConnection.disconnect(); } }
Cocos-JS HTTP网络请求
网络结构
网络结构是网络构建方式,目前流行的有客户端服务器结构(C/S结构)和点对点(P2P)结构网络。
客户端服务器结构(C/S结构)
这种结构又被称为Clicent/Server结构,它是一种主从结构。服务器一直处于等待状态,如果客户端请求,服务器响应请求,建立连接,提供服务。服务器是被动的,客户端是主动的。类似于在豪华餐厅点餐,客人是主动的,服务员是被动的。
点对点结构(P2P结构)
这种结构也叫做对等结构网络,每个节点之间是对等的。网络分布范围比较少,通常在一间办公室或者一个家庭内,适用于移动设备之间的通讯,网络链路层由蓝牙和Wifi实现。类似于在吃豪华自助餐,所有的客人都是对等的。
考虑到跨平台的需要,Cocos-JS引擎主要采用C/S网络结构。这种结构主要采用HTTP和HTTPS等传输协议。
HTTP
HTTP是超文本传输协议,Interent的基本协议是TCP/IP,目前使用广泛使用的是HTTP、HTTPS、FTP、Archie Gopher等是简历在TCP/IP之上的应用层协议,不同的协议对应不同的应用。
HTTP是一个属于应用层的面向对象的协议,由于其简洁,快速的方式,适用于分布式超文本信息传输。
HTTP定义了8中请求方法,OPTIONS,HEAD,GET,POST,PUT,DELETE,TRACE和CONNECT作为Web服务器,至少需实现GET和HEAD方法,其他方法是可选的。
GET方法是向指定的资源发送请求,发送的信息在URL后面。像是使用明信片给别人写信,“信内容”写在外面,接触到的人都可以看到,不安全。
POST方法是向指定的资源提交数据,请求服务器进行处理。像是把“信内容”装入信封寄出去,接触到的人都看不到,因此是安全的。
HTTPS
HTTPS是安全的超文本传输协议,是超文本传输协议和SSL加密的结合。提供加密通信对网络服务器身份的鉴定。
HTTPS是HTTP的升级版。与HTTP的区别是,HTTPS使用https://代替http://,HTTPS使用端口443,而HTTP使用端口80和TCP/IP金星通信。SSL使用40位关键字作为RC4流加密算法。这对于商业信息的加密是合适的。
使用XMLHttpResquest对象
在web前端开发有一种异步刷新技术AJAX。它的核心技术就是JavaScript对象的XMLHttpResquest,他是一种异步请求技术。
1. open()与服务器连接,创建新的连接请求。
2. send()向服务器发送请求。
3. abort()退出当前请求。
4. readyState属性,提供当前请求的状态,其中4表示准备就绪。
5. status属性,提供当前的HTTP请求状态吗,其中200表示请求成功。
6. responseText属性,服务器返回的响应文本。
7. onreadystatechange属性,设置回调函数。
其中,open和send函数,以及onreadystatechange属性是http请求的关键。
open函数有5个参数可以使用。(method,url,async,user,password)
method是指发送请求的类型,一般为GET或POSt
url是指请求的链接
async是否异步请求,该参数可选,默认为true
user如果该请求需要身份认证,这里指定用户名,无默认值
password如果该请求需要身份验证,这里指定密码,无默认值
XMLHttpResquest有5中就绪状态
0:请求没有发出,在调用open()函数之前为改状态
1:请求已经建立但还没有发出,在调用send()函数之前为改状态
2:请求已经发出正在处理中
3:请求已经处理,响应中通常有部分数据可用,但是服务器没有完成响应
4:响应已经完成,可以访问服务器响应并使用它
常见的HTTP状态码
401:表示所访问数据禁止访问
403:表示所访问数据受到保护
404:表示错误的URL请求,服务器资源不存在
200:表示请求成功
如果就是状态是4,并且状态码是200,表示请求完成可以处理服务器数据
Get请求方式
1 var XMLHttpResquestGet = function (url, callback) {
2 var request = cc.loader.getXMLHttpRequest();
3 request.open("GET", url, true);
4
5 request.onreadystatechange = function () {
6 //如果就绪状态是4,状态码是200则表示请求成功
7 if(request.readyState === 4 && request.status === 200) {
8 try{
9 console.log("XMLHttpResquestGet Status:" + request.statusText);
10 if(callback) callback(true, request.responseText);
11 }
12 catch (e) {
13 if(callback) callback(false, e);
14 }
15 }
16 else{
17 if(callback) callback(false, );
18 }
19 };
20 request.send();
21 };
POST请求方式
1 var XMLHttpResquestPost = function (url, params, callback) {
2 var xhr = cc.loader.getXMLHttpRequest();
3 xhr.open("POST", url);
4
5 xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
6 xhr.onreadystatechange = function () {
7 //如果就绪状态是4,状态码是200则表示请求成功
8 if(xhr.readyState === 4 && xhr.status === 200) {
9 try{
10 console.log("XMLHttpResquestPost Status:" + xhr.statusText);
11 if(callback) callback(true, xhr.responseText);
12 }
13 catch (e) {
14 if(callback) callback(false, e);
15 }
16 }
17 else{
18 if(callback) callback(false);
19 }
20 };
21 xhr.send(params);
22 };
今天的关于如何发出 HTTP POST 网络请求和如何发送http请求的分享已经结束,谢谢您的关注,如果想了解更多关于Android中的OkHttp用于发出网络请求、Android网络请求(3) 网络请求框架OkHttp、Android:如何发出HTTP HEAD请求?、Cocos-JS HTTP网络请求的相关知识,请在本站进行查询。
本文标签: