Aliのp8レベルの文字は、Javaがhttpリクエストを開始する完全なステップレコードを教えてくれます

この記事では、主にJavaがhttpリクエストを開始することに関する関連情報を紹介します。この記事では、サンプルコードを通じて詳細に紹介します。サンプルコードには、すべての人の学習や仕事に役立つ特定の参照学習値があります。それが必要な友達は、以下のエディターに従ってください。学習方法を学ぶ

将来のプロジェクトでは、一部の機能モジュールが異なる言語で記述される可能性があります。これには、モジュールを呼び出すためのhttpリクエストが必要です。以下では、Javaを例として取り上げ、httpリクエストを開始する方法を詳しく説明します。

1.GETとPOST

  • GETとPOSTは、HTTPの2つの一般的な方法です。

  • GETは、指定されたサーバーからデータを取得することを意味します

  • POSTは、処理のために指定されたサーバーにデータを送信することを指します

1. GETメソッドはGETメソッドを
使用し、渡す必要のあるパラメーターがURLアドレスに追加され、サーバーに送信されます。

例:http://121.41.111.94/submit?name = zxy&age = 21

特徴:

  • GETリクエストはキャッシュできます
  • GETリクエストはブラウザの閲覧履歴に保存されます
  • GETでリクエストされたURLはブラウザのブックマークとして保存できます
  • GETリクエストには長さの制限があります
  • GETリクエストは、主にデータを取得するために使用されます

2. POSTメソッドはPOSTメソッドを
使用し、渡す必要のあるパラメーターはPOSTメッセージに個別に存在し、HTTPリクエストと一緒にサーバーに送信されます。

例えば:

POST /submit HTTP/1.1
Host 121.41.111.94
name=zxy&age=21

特徴:

  • POSTリクエストをキャッシュできません
  • POSTリクエストはブラウザの閲覧履歴に保存されません
  • POSTによって要求されたURLをブラウザのブックマークとして保存することはできません
  • POSTリクエストの長さの制限はありません。以下
    実装コード
    は、Javaによって送信されたGET / POSTリクエストを直接使用できるHttpRequestクラスにカプセル化します。HttpRequestクラスコードは次のとおりです。
`import` `java.io.BufferedReader;`

`import` `java.io.IOException;`

`import` `java.io.InputStreamReader;`

`import` `java.io.PrintWriter;`

`import` `java.net.URL;`

`import` `java.net.URLConnection;`

`import` `java.util.List;`

`import` `java.util.Map;`

`public` `class` `HttpRequest {
    
    `

`/**`

`* 向指定URL发送GET方法的请求`

`*`

`* @param url`

`*   发送请求的URL`

`* @param param`

`*   请求参数,请求参数应该是 name1=value1&name2=value2 的形式。`

`* @return URL 所代表远程资源的响应结果`

`*/`

`public` `static` `String sendGet(String url, String param) {
    
    `

`String result =` `""``;`

`BufferedReader in =` `null``;`

`try` `{
    
    `

`String urlNameString = url +` `"?"` `+ param;`

`URL realUrl =` `new` `URL(urlNameString);`

`// 打开和URL之间的连接`

`URLConnection connection = realUrl.openConnection();`

`// 设置通用的请求属性`

`connection.setRequestProperty(``"accept"``,` `"*/*"``);`

`connection.setRequestProperty(``"connection"``,` `"Keep-Alive"``);`

`connection.setRequestProperty(``"user-agent"``,`

`"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"``);`

`// 建立实际的连接`

`connection.connect();`

`// 获取所有响应头字段`

`Map<String, List<String>> map = connection.getHeaderFields();`

`// 遍历所有的响应头字段`

`for` `(String key : map.keySet()) {
    
    `

`System.out.println(key +` `"--->"` `+ map.get(key));`

`}`

`// 定义 BufferedReader输入流来读取URL的响应`

`in =` `new` `BufferedReader(``new` `InputStreamReader(`

`connection.getInputStream()));`

`String line;`

`while` `((line = in.readLine()) !=` `null``) {
    
    `

`result += line;`

`}`

`}` `catch` `(Exception e) {
    
    `

`System.out.println(``"发送GET请求出现异常!"` `+ e);`

`e.printStackTrace();`

`}`

`// 使用finally块来关闭输入流`

`finally` `{
    
    `

`try` `{
    
    `

`if` `(in !=` `null``) {
    
    `

`in.close();`

`}`

`}` `catch` `(Exception e2) {
    
    `

`e2.printStackTrace();`

`}`

`}`

`return` `result;`

`}`

`/**`

`* 向指定 URL 发送POST方法的请求`

`*`

`* @param url`

`*   发送请求的 URL`

`* @param param`

`*   请求参数,请求参数应该是 name1=value1&name2=value2 的形式。`

`* @return 所代表远程资源的响应结果`

`*/`

`public` `static` `String sendPost(String url, String param) {
    
    `

`PrintWriter out =` `null``;`

`BufferedReader in =` `null``;`

`String result =` `""``;`

`try` `{
    
    `

`URL realUrl =` `new` `URL(url);`

`// 打开和URL之间的连接`

`URLConnection conn = realUrl.openConnection();`

`// 设置通用的请求属性`

`conn.setRequestProperty(``"accept"``,` `"*/*"``);`

`conn.setRequestProperty(``"connection"``,` `"Keep-Alive"``);`

`conn.setRequestProperty(``"user-agent"``,`

`"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"``);`

`// 发送POST请求必须设置如下两行`

`conn.setDoOutput(``true``);`

`conn.setDoInput(``true``);`

`// 获取URLConnection对象对应的输出流`

`out =` `new` `PrintWriter(conn.getOutputStream());`

`// 发送请求参数`

`out.print(param);`

`// flush输出流的缓冲`

`out.flush();`

`// 定义BufferedReader输入流来读取URL的响应`

`in =` `new` `BufferedReader(`

`new` `InputStreamReader(conn.getInputStream()));`

`String line;`

`while` `((line = in.readLine()) !=` `null``) {
    
    `

`result += line;`

`}`

`}` `catch` `(Exception e) {
    
    `

`System.out.println(``"发送 POST 请求出现异常!"``+e);`

`e.printStackTrace();`

`}`

`//使用finally块来关闭输出流、输入流`

`finally``{
    
    `

`try``{
    
    `

`if``(out!=``null``){
    
    `

`out.close();`

`}`

`if``(in!=``null``){
    
    `

`in.close();`

`}`

`}`

`catch``(IOException ex){
    
    `

`ex.printStackTrace();`

`}`

`}`

`return` `result;`

`}`

`}`

デモンストレーションの例
フラスコフレームワークの構築に関する記事では、汎用モジュールshow()を記述しました。汎用モジュールは次のとおりです。

#app的路由地址"/show"即为ajax中定义的url地址,采用POST、GET方法均可提交
@app.route("/show",methods=["GET", "POST"])
def show():
 #首先获取前端传入的name数据
 if request.method == "POST":
  name = request.form.get("name")
 if request.method == "GET":
  name = request.args.get("name")
 #创建Database类的对象sql,test为需要访问的数据库名字 具体可见Database类的构造函数
 sql = Database("test")
 try:
  #执行sql语句 多说一句,f+字符串的形式,可以在字符串里面以{
    
    }的形式加入变量名 结果保存在result数组中
  result = sql.execute(f"SELECT type FROM type WHERE name='{name}'")
 except Exception as e:
  return {
    
    'status':"error", 'message': "code error"}
 else:
  if not len(result) == 0:
   #这个result,我觉得也可以把它当成数据表,查询的结果至多一个,result[0][0]返回数组中的第一行第一列
   return {
    
    'status':'success','message':result[0][0]}
  else:
   return "rbq"

以下では、POSTメソッドを使用してリクエストを開始します。Javaコードは次のとおりです。

`//创建发起http请求对象`

`HttpRequest h =` `new` `HttpRequest();`

`//向121.41.111.94/show发起POST请求,并传入name参数`

`String content = h.sendPost(``"[http://121.41.111.94/show](http://121.41.111.94/show)"``,``"name=张新宇"``);`

`System.out.println(content);  `

コンテンツの値を出力すると、Pythonでshow()によって返されるjsonであることがわかります(Javaでは、コンテンツはjsonではなく文字列型として認識されます)
ここに画像の説明を挿入

(変換プロセス中、何が問題だったのかわかりません。中国語ではUnicodeエンコードが表示されます。ただし、json形式に変換した後は、そのような問題はありません。)
文字列からjsonへ

JavaがHttpリクエストを正常に開始した後、戻り値は元のpython関数のjson形式ではなくStringになります。したがって、文字列型をjson形式に変換し、メッセージに対応する値をキーと値のペアの形式で取得する必要があります。
まず、Mavenにjarパッケージを導入します。

   <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>

変換コードは次のとおりです。

import com.alibaba.fastjson.JSONObject;
JSONObject jsonObject = JSONObject.parseObject(content);
System.out.println(jsonObject);
System.out.println(jsonObject.getString("message"));

演算結果:

上記の終わり
は、Javaがhttp要求を開始して、Pythonによって記述された汎用モジュールを呼び出すことです。Pythonを使用して汎用モジュールを作成する場合、json形式でデータを返すことができます。後でJavaを使用して呼び出すときは、ツールを使用して変換し、必要なデータを取得します。

これまで、Javaがhttpリクエストを開始する完全なステップレコードに関するこの記事を紹介しました。Javaがhttpリクエストを開始する関連コンテンツについては、エディターの前の記事に注意するか、wx1411943564コメント(csdn)を追加してください。将来的にはエディタを大いにサポートするでしょう。

おすすめ

転載: blog.csdn.net/dcj19980805/article/details/115280422
おすすめ