網站首頁 編程語言 正文
1.查詢(get)-調用的時候記得開線程
GET一般用于獲取/查詢資源信息
val sb = StringBuffer()
try {
val url = URL(url)
val conn = url.openConnection() as HttpURLConnection
conn.requestMethod = "GET"
conn.connectTimeout = 5000
val code = conn.responseCode
if (code == 200) {
val `is` = conn.inputStream
val b = ByteArray(1024)
var len: Int
while (`is`.read(b).also { len = it } != -1) {
sb.append(String(b, 0, len, Charset.forName("UTF-8")))
}
`is`.close()
conn.disconnect()
Log.e("TAG","sb==${sb.toString()}")
} else {
Log.e("TAG","code==${code.toString()}")
}
} catch (var1: Exception) {
Log.e("TAG","Exception==${var1.message}")
}
2.改(post)
post向指定資源提交數據進行處理請求(提交表單、上傳文件),又可能導致新的資源的建立或原有資源的修改。
val sb = StringBuffer()
object : Thread() {
override fun run() {
super.run()
try {
val url = URL(urlPath)
val conn = url.openConnection() as HttpURLConnection
conn.doOutput = true
conn.requestMethod = "POST"
conn.connectTimeout = 5000
conn.doInput = true
conn.useCaches = false
conn.setRequestProperty("Connection", "Keep-Alive")
conn.setRequestProperty("Charset", "UTF-8")
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
conn.setRequestProperty("accept", "application/json")
conn.setRequestProperty("appid", mAPP_ID)
conn.setRequestProperty("ts", time)
conn.setRequestProperty("sign", sign)
Log.e(TAG, "Json:$Json")
if (Json != null && !TextUtils.isEmpty(Json)) {
val writebytes = Json.toByteArray()
conn.setRequestProperty("Content-Length", writebytes.size.toString())
val outwritestream = conn.outputStream
outwritestream.write(Json.toByteArray())
outwritestream.flush()
outwritestream.close()
}
val code = conn.responseCode
if (code == 200) {
val `is` = conn.inputStream
val b = ByteArray(1024)
var len: Int
while (`is`.read(b).also { len = it } != -1) {
sb.append(String(b, 0, len, Charset.forName("UTF-8")))
}
`is`.close()
conn.disconnect()
Log.w(TAG, "TXPost sb====$sb")
} else {
Log.w(TAG, "TXPost code====$code")
}
} catch (var1: Exception) {
Log.w(TAG, "TXPost Exception====$var1")
}
}
}.start()
設置請求頭:
1.基本headers 這四句一般沒有特殊需求的話,都是需要的
conn.setRequestProperty("Connection", "Keep-Alive")
conn.setRequestProperty("Charset", "UTF-8")
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
conn.setRequestProperty("accept", "application/json")
2.特殊headers 這些是客戶端與服務通信服務器所需的headers
conn.setRequestProperty("appid", mAPP_ID)
conn.setRequestProperty("ts", time)
conn.setRequestProperty("sign", sign)?
Headers:
HTTP是“Hypertext Transfer Protocol”的所寫,整個萬維網都在使用這種協議,幾乎你在瀏覽器里看到的大部分內容都是通過http協議來傳輸的.
HTTP Headers是HTTP請求和相應的核心,它承載了關于客戶端瀏覽器,請求頁面,服務器等相關的信息.
設置body(請求內容)
if (Json != null && !TextUtils.isEmpty(Json)) {
val writebytes = Json.toByteArray()
conn.setRequestProperty("Content-Length", writebytes.size.toString())
val outwritestream = conn.outputStream
outwritestream.write(Json.toByteArray())
outwritestream.flush()
outwritestream.close()
}
有時候開發的時候你能看到一個名叫token的東西,這個玩意是后臺自定義的東西,有時候可以放在請求頭,有時候可以放在body里面,具體可以看協議
3.增(PUT)
PUT:這個方法比較少見。HTML表單也不支持這個。本質上來講, PUT和POST極為相似,都是向服務器發送數據,但它們之間有一個重要區別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器自己決定。
val url = URL(urlPath)
val connection = url.openConnection() as HttpURLConnection
val outputStream = connection.outputStream
val inputStream = FileInputStream(file)
object : Thread() {
override fun run() {
super.run()
try {
connection.doOutput = true
connection.useCaches = false
connection.setRequestProperty("Accept-Charset", "utf-8")
connection.setRequestProperty("Connection", "keep-alive")
connection.setRequestProperty(
"Content-Type",
"multipart/form-data;boundary=fengexian===="
)
connection.setRequestProperty("Accept", "application/json")
connection.connect()
val bytes = ByteArray(
getFileOrFilesSize(file.absolutePath).toInt()
)
var length: Int
while (inputStream.read(bytes).also { length = it } != -1) {
outputStream.write(bytes, 0, length)
}
outputStream.flush()
val response = connection.inputStream
val reader = InputStreamReader(response)
while (reader.read() != -1) {
String(bytes, Charset.forName("UTF-8"))
}
if (connection.responseCode == 200) {
Log.w("TAG", "connection===${connection.responseMessage}")
} else {
Log.w("TAG", "responseCode===${connection.responseCode}")
}
} catch (var13: IOException) {
Log.w("TAG", "IOException===${var13.message}")
} finally {
try {
outputStream.close()
inputStream.close()
connection.disconnect()
} catch (var12: IOException) {
var12.printStackTrace()
}
}
}
}.start()
4.刪(DELETE請求)
DELETE:刪除某一個資源?;旧线@個也很少見,我只在像亞馬遜s3之類的服務器見過!
val sb = StringBuffer()
var uri: URL? = null
var con: HttpURLConnection? = null
try {
uri = URL(url)
con = uri.openConnection() as HttpURLConnection
con.requestMethod = "DELETE"
con.doOutput = true
con.doInput = true
con.connectTimeout = 60000 //60 secs
con.readTimeout = 60000 //60 secs
val code = con.responseCode
if (code == 200) {
val `is` = con.inputStream
val b = ByteArray(1024)
var len: Int
while (`is`.read(b).also { len = it } != -1) {
sb.append(String(b, 0, len, Charset.forName("UTF-8")))
}
`is`.close()
con.disconnect()
Log.w("TAG", "sb===${sb}")
} else {
Log.w("TAG", "code===$[code]")
}
} catch (e: Exception) {
Log.w("TAG", "Exception===${e.message}")
}
原文鏈接:https://blog.csdn.net/qq_36333309/article/details/127026738
相關推薦
- 2022-10-09 React高階組件的使用淺析_React
- 2022-09-24 詳解K8S?apiVersion對照表_云其它
- 2022-09-02 C#中ftp檢測目錄是否存在和創建文件夾的實現_C#教程
- 2022-07-26 golang控制goroutine數量以及獲取處理結果
- 2023-02-05 Python實現自定義包的實例詳解_python
- 2021-12-03 Go并發編程中sync/errGroup的使用_Golang
- 2022-06-11 在Docker容器中部署MSSQL_docker
- 2022-02-03 Windows10 可以上網(會斷)顯示無Internet鏈接
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支