Kotlinネットワークプログラミング(5)インターネットリソースへのアクセス
6326 ワード
java.net.URL
クラスを使ってハイレベルのネットワークプログラムを行い、URL類を通じてインターネットリソースにアクセスすることができます.URLを使ってネットワークプログラミングをするのは、プロトコル自体を掉う必要がありません.相対的に简単です.一、URLの概念
インターネットリソースはURLで指定されています.URLはUniflom Resource Locatorの略称です.翻訳してみると「一致リソースポジショナ」ですが、URLという略称は人々に慣れています.
://
「プロトコル名」は、http、ftp、gopher、fileなどのリソースを取得するために使用される転送プロトコルを指定しています.「リソース名」は、ホスト名、ポート番号、ファイル名またはファイル内部の参照を含むリソースの完全なアドレスであるべきです.例えば:
http://www.baidu.com/
http://home.sohu.com/home/welcome.html
http://www.51work6.com:8800/Gamlan/network.html#BOTTOM
二、HTTP/HTTPSプロトコルインターネットアクセスの多くはHTTP/HTTPSプロトコルに基づいています.
1、HTTPプロトコル
_; HTTPはHypertext Transfer Protocolの略語であり、ハイパーテキスト転送プロトコルである.HTTPは、アプリケーション層に属するオブジェクト指向プロトコルであり、その簡潔かつ迅速な方法は、分散型超テキスト情報の伝送に適している.HTTPプロトコルは、C/Sネットワーク構造をサポートしており、接続プロトコルがない、つまり、要求ごとに接続が確立され、サーバがクライアントの要求を処理した後、クライアントに応答して接続を切断し、ネットワークリソースを占有しない.
HTTP/1.1プロトコルには8つの要求関数が定義されています.
OPTIONS
・HEAD
・GET
・POST
PUT
DELETE
・TRACE
・CONNECT
・・.HTTPアクセスでは、一般的にはGET
和POST
関数を使用します._; HTTPSは、Hypertext Transfer Protocol Secureの略語であり、ハイパーテキスト転送セキュリティプロトコルであり、超テキスト転送プロトコルとSSLの組み合わせであり、暗号通信およびネットワークサーバのアイデンティティの識別を提供するために使用される.
HTTPSはHTTPのアップグレード版であり、HTTPSとHTTPの違いは、HTTPSの使用
https://
代替http://
HTTPSの使用ポート443とHTTPの使用ポート80とである.SSLは40ビットのキーワードをRC 4ストリーム暗号化アルゴリズムとして使用しており、これは商業情報の暗号化に適切である.HTTPSとSSLはX.509デジタル認証の使用をサポートしています.必要なら、ユーザは送信者が誰かを確認できます.三、URL類を使う
java.net.URL
類はインターネット上の資源を要求するために用いられ、HTTP/HTTPSプロトコルを採用しており、要求関数はGET
関数であり、一般的には静的で少量のサーバ端末データを要求する.URL類でよく使われる構造関数は以下の通りです.
URL(spec: String!)
.文字列表示形式に従ってURLオブジェクトを作成します.URL(protocol: String!, host: String!, file: String!)
.URLオブジェクトは、指定されたプロトコル名、ホスト名、ファイル名に基づいて作成されます.URL(protocol: String!, host: String!, port: Int! file: String!)
.URLオブジェクトは、指定されたプロトコル名、ホスト名、ポート番号、およびファイル名に基づいて作成されます.openStream()
.このURLの接続を開き、入力ストリームInputStreamオブジェクトを返す.openConnection()
.このURLの新しい接続を開けて、URLConnectionオブジェクトを返します.fun main(args: Array) {
val url = "http://www.baidu.com"
URL(url).openStream().use { input ->
input.bufferedReader().forEachLine {
println(it)
}
}
}
四、HttpURLConnectionを使ってGET要求を送信するURL類はHTTP/HTTPSのGET関数要求のみ送信できますので、他の関数の操作をしたい場合は
HttpURLConnection
タイプが使用できます.private const val urlString = "http://www.51work6.com/service/mynotes/WebService.php" +
"[email protected]&type=JSON&action=query"
fun main(args: Array) {
var conn: HttpURLConnection? = null
try {
conn = URL(urlString).openConnection() as HttpURLConnection
conn.connect()
conn.inputStream.use { input ->
val data = input.bufferedReader().readText()
println(data)
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
conn?.disconnect()
}
}
//
{
"ResultCode": 0,
"Record": [
{
"ID": 666,
"CDate": "2017-05-18",
"Content": " 。"
},
{
"ID": 666,
"CDate": "2018-10-18",
"Content": "Welcome to zhijieketang."
}
]
}
五、HttpURLConnectionを使ってPOST要求を送ります._; HttpURLConnectionはHTTP/HTTPSのPOST要求を送ることもできます.以下はHttpURLConnectionを使ってPOST要求を送信するケースです.
private const val urlString = "http://www.51work6.com/service/mynotes/WebService.php"
fun main(args: Array) {
var conn: HttpURLConnection? = null
try {
conn = URL(urlString).openConnection() as HttpURLConnection
conn.requestMethod = "POST" // POST
conn.doOutput = true //
// post
val param = String.format("email=%s&type=%s&action=%s", "[email protected]", "JSON", "query")
DataOutputStream(conn.outputStream).use { os ->
os.writeBytes(param)
}
conn.connect()
conn.inputStream.use { input ->
val data = input.bufferedReader().readText()
println(data)
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
conn?.disconnect()
}
}
//
{
"ResultCode": 0,
"Record": [
{
"ID": 666,
"CDate": "2017-05-18",
"Content": " 。"
},
{
"ID": 666,
"CDate": "2018-10-18",
"Content": "Welcome to zhijieketang."
}
]
}
六、例:Downloaderダウンロードプログラムprivate const val urlString = "https://ss0.bdstatic.com/" +
"5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"
fun main(args: Array) {
var conn: HttpURLConnection? = null
try {
conn = URL(urlString).openConnection() as HttpURLConnection
conn.connect()
conn.inputStream.use { input ->
BufferedOutputStream(FileOutputStream("./download.png")).use { bos ->
input.copyTo(bos)
}
}
println(" !")
} catch (e: Exception) {
e.printStackTrace()
println(" !")
} finally {
conn?.disconnect()
}
}