mysqlを使用して、URLから返されたhttp GETリクエストデータを記録します。

mysqlを使用して、URLから返されたhttp GETリクエストデータを記録します。

ビジネスシナリオの要件と実装ロジックの分析

ビジネスでは、HTTP GET を使用してデータを要求する必要がある状況によく遭遇します。たとえば、http 要求によって返される結果は次のとおりです。

では、このデータを MySQL に保存したい場合はどうすればよいでしょうか?

実際、Python の httplib パッケージと MySQLdb パッケージを呼び出すのは実装が非常に簡単です。httplib は URL の戻り値を取得する役割を担い、MySQLdb は MySQL データベースを操作する役割を担います。以下に、関係の論理図を示します。

それでは、コード開発を始めましょう。

Python依存パッケージの準備

Python では少なくとも以下のパッケージを使用する必要があります。MySQLdb 依存パッケージのインストールについては、mysql 依存パッケージ mysql-python の Python インストールを参照してください。

# これは Python テキストエディタのインターフェースです #!/usr/bin/python
# コーディング=utf-8
httplibをインポートする
jsonをインポート
インポート時間
MySQLdbをインポートする

httplibを使用してURLリクエストの戻り値を取得する

httplib パッケージは次のメソッドと関数をサポートしています。

url = "http://www.testtesttest.com/mobile/kit?token=yyyyyyyyyy&key=tttttt&size=1" #特定の URL リンク conn = httplib.HTTPConnection("www.testtesttest.com")
conn.request(method="GET", url=url) #GET メソッドと URL オブジェクトを指定します response = conn.getresponse() #レスポンス オブジェクトを作成します res = response.read() #URL によって返されたコンテンツを読み取ります # json.loads メソッドを使用して json を Python オブジェクトにデコードします json_repose = json.loads(res)
データ = json_repose['データ']

この時点で、http リクエストによって返されるすべての情報はオブジェクト res に保存されます。リクエストは json 文字列を返すため、json.loads メソッドを使用して解析します。

リクエストによって返された JSON コンテンツを最終的に Python オブジェクトに保存していることがわかります。データが配列またはタプルに変換されると、Python 独自の関数を使用してデータを解析したり、その他の操作を実行したりできます。

URL リクエストによって返された JSON を Python で解析する

# ここでjsonを解析する関数を定義します
データリストを分析する
 data_dict = データ[i]
 ステータス = data_dict['ステータス']
 devi_id = data_dict['devi_id']
 update_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(data_dict['update_time']))
 actived_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(data_dict['actived_time']))
 devi_id、imei、device_type、actived_time を返します。

Pythonはデータベースに接続し、データを書き込む

以下はデータベースへの接続例です。

# データベース接続を開き、データベース IP、ユーザー名、パスワード、接続ライブラリ名を指定します。 db = MySQLdb.connect("192.168.xxx.xxx", "db_user", "db_password", "db_database", charset='utf8')
# カーソル操作を取得するには、cursor() メソッドを使用します。cursor = db.cursor()
# テーブルを作成するSQL文 sql = """create table if not exists `gergsmart_list`(
`devi_id` varchar(255) NOT NULL COMMENT 'IMEI, //ハードウェアデバイスIMEI',
`imei` varchar(255) COMMENT 'ICCID, //ハードウェアデバイスSIMカード',
`device_type` varchar(255) COMMENT 'デバイスタイプ',
`actived_time` datetime COMMENT '最初のアクティベーション時間',
主キー(`devi_id`)
)ENGINE=INNODB デフォルト文字セット=utf8;
「」
# execute メソッドを使用して SQL ステートメントを実行し、テーブルを作成します。cursor.execute(sql)
# データを挿入するSQL文 insert_sql = "insert into `gergsmart_list` \
(デバイスID、IMEI、デバイスタイプ、アクティブ時間) \
値(%s、%s、%s、%s、)"

上記から、Python によって解析されたオブジェクト devi_id、imei、device_type、actived_time を mysql の insert ステートメントに配置することで、「URL からデータを取得し、それを Python オブジェクトに保存し、Python オブジェクトを mysql レコードに挿入する」という操作を実現できることがわかります。

要約すると、Python は実際には URL リクエストの戻り値を受け取って MySQL に書き込むリレーとして考えることができます。このうち、httplib は受信操作を担当し、MySQLdb は書き込み操作を担当します。

補足: mysql リクエストがタイムアウトしました。 GET リクエストと POST リクエストへの拡張の違いは何ですか? 非常に詳細です! 1 つの記事ですべての問題を解決できます。 !

データベース接続アドレスを 127.0.0.1 から localhost に変更するだけです。実証済みで効果的です! !

多くの情報を参考にして、get リクエストと post リクエストの違いをまとめました。

以下の結論が得られました。

GET リクエストのパラメータが URL 上で直接公開されるため、セキュリティが低いことはよく知られています。 POST リクエストのパラメータは本体に保存されるため、より安全です。次に、もう少し包括的な説明を見てみましょう。

まずは先人達の解説を見てみましょう。

1. GET リクエストと POST リクエストの違いは何ですか?

Get はサーバーからデータを取得することであり、Post はサーバーにデータを送信することです。

Get は、送信されたフォームの ACTION 属性によって指定された URL にパラメータ データ キューを追加します。値はフォーム内の各フィールドに 1 つずつ対応しており、URL で確認できます。 Post は HTTP ポスト メカニズムを使用して、フォーム内のさまざまなフィールドとその内容を HTML HEADER に配置し、ACTION 属性によって指定された URL アドレスに送信します。このプロセスはユーザーには見えません。

get メソッドの場合、サーバーは Request.QueryString を使用して変数の値を取得します。 post メソッドの場合、サーバーは Request.Form を使用して送信されたデータを取得します。

get によって送信されるデータの量は少なく、2KB を超えることはできません。郵便で送信されるデータの量は大きく、通常は制限がないものと想定されます。しかし、理論上は、最大量は IIS4 では 80 KB、IIS5 では 100 KB です。

get のセキュリティは非常に低いですが、post のセキュリティは高くなります。

GETリクエストはキャッシュできますが、POSTリクエストはキャッシュされません。

GET リクエストはブラウザの履歴に保存されます。POST リクエストはブラウザの履歴に保存されません。

GET リクエストはブックマークできます。POST リクエストはブックマークできません。

GET リクエストは URL エンコード (application/x-www-form-urlencoded) のみ可能です。POST は複数のエンコード (application/x-www-form-urlencoded または multipart/form-data) をサポートします。バイナリ データには複数のエンコードが使用されます。

最も直感的な違いは、GET では URL にパラメータが含まれるのに対し、POST ではリクエスト本文を通じてパラメータが渡されることです。

次に、公式声明を見てみましょう。

2. w3schoolsも両者を区別し、公式の回答を出している。

GET はブラウザがフォールバックしても無害ですが、POST はリクエストを再度送信します。

GET によって生成された URL はブックマークできますが、POST はブックマークできません。

GET リクエストはブラウザによってアクティブにキャッシュされますが、POST は手動で設定しない限りキャッシュされません。

GET リクエストは URL エンコードのみ可能ですが、POST は複数のエンコード方法をサポートします。

GET リクエスト パラメータはブラウザ履歴に完全に保持されますが、POST のパラメータは保持されません。

GET リクエストの URL で送信されるパラメータの長さは制限されていますが、POST リクエストでは制限はありません。

パラメータ データ型の場合、GET は ASCII 文字のみを受け入れますが、POST には制限はありません。

GET はパラメータが URL 内で直接公開されるため、機密情報を渡すために使用できず、POST よりも安全性が低くなります。

GET パラメータは URL を介して渡され、POST パラメータはリクエスト本文に配置されます。

GET は 1 つの TCP パケットを生成し、POST は 2 つの TCP パケットを生成します。

上記と参照した情報に基づいて要約を作成する

HTTP は、World Wide Web 上でデータがどのように通信されるかを記述する TCP/IP に基づくプロトコルです。 HTTP の基盤となる層は TCP/IP です。したがって、GET と POST の基盤となる層も TCP/IP であり、つまり、GET/POST は両方とも TCP リンクです。 GET と POST はまったく同じことを行うことができます。 GET にリクエスト本文を追加し、POST に URL パラメータを追加する必要がありますが、これは技術的には可能です。

POST リクエストと GET リクエストはどちらも HTTP リクエスト メソッドです。両者の間に本質的な違いはありません。基礎となる実装は TCP/IP プロトコルに基づいています。しかし、リクエストの方法は多様であるため、HTTP ではリクエスト方法を分割して規制し、get リクエストと post リクエストの処理を分担して区別しています。

さらに、別の違いも見つかりました。GET は 1 つの TCP パケットを生成し、POST は 2 つの TCP パケットを生成します。 GET リクエストの場合、ブラウザは http ヘッダーとデータを一緒に送信し、サーバーは 200 (データを返す) で応答します。POST の場合、ブラウザは最初にヘッダーを送信し、サーバーは 100 continue で応答し、次にブラウザはデータを送信し、サーバーは 200 ok (データを返す) で応答します。

GET と POST はそれぞれ独自のセマンティクスを持ち、混在させることはできません。

研究によると、ネットワークの状態が良好な場合、1 つのパケットを送信するのにかかる時間と 2 つのパケットを送信するのにかかる時間の差は基本的に無視できます。ネットワーク状態が悪い場合、2 つのパケットを使用する TCP は、データ パケットの整合性を検証する上で大きな利点があります。

すべてのブラウザが POST でパケットを 2 回送信するわけではありません。Firefox は 1 回のみ送信します。

まとめ:

「GET によって送信されるデータの最大量は 1024 バイトです。」GET は URL を通じてデータを送信するため、GET が送信できるデータの量は URL の長さに直接関係します。実際、URL パラメータの上限に問題はなく、HTTP プロトコル仕様では URL の長さに制限はありません。この制限は、特定のブラウザとサーバーによって課される制限です。 IE では URL の長さが 2083 バイト (2K+35) に制限されます。 Netscape、FireFox などの他のブラウザの場合、理論上は長さの制限はなく、制限はオペレーティング システムのサポートによって異なります。この制限は、パラメータ値データの長さだけではなく、URL 全体の長さであることに注意してください。

理論上、POST にはサイズ制限はなく、HTTP プロトコル仕様にもサイズ制限はありません。「POST データには 80K/100K のサイズ制限がある」というのは正確ではありません。POST データに制限はありません。制限するのは、サーバーの処理プログラムの処理能力です。 ASP プログラムの場合、Request オブジェクトが各フォーム フィールドを処理するときに、データ長が 100K に制限されます。しかし、Request.BinaryRead を使用する場合、そのような制限はありません。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • get と post を介して http リクエストを送信し、http 応答を受信する Python メソッド
  • Pythonはhttpリクエストを送信して解析し、jsonの例を返します。
  • Javaバックグラウンドはレスポンスデータを取得するためにgetリクエストを開始します。

<<:  JavaScript が Xiaomi のカルーセル効果を模倣

>>:  Spring Boot 2.4 の新機能、ワンクリックビルド、Docker イメージプロセスの詳細説明

推薦する

テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加によく使用される MySQL の SQL 文の概要

この記事では、テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加を行う一般的な ...

Centos7.6にTomcat-8.5.39をインストールする方法

Centos7.6 に Tomcat-8.5.39 をインストールする方法は次のとおりです。詳細は次...

ウェブデザインの達人がよく使うレスポンシブフレームワークを共有する(要約)

この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...

MySQL での order by の使用に関する詳細

目次1. はじめに2. 本文2.1 単一列のソート2.2 複数の列を並べ替える2.3 ソート方法2....

VirtualBox の仮想ディスク vdi ファイルの容量を拡張する方法 (グラフィック チュートリアル)

VirtualBoxのインストールディレクトリを見つけます。ディレクトリ内には容量を拡張するために...

Windows 10 での Tomcat のインストールと展開に関する詳細なチュートリアル

目次1 Java環境の設定2 tomcatのインストールと展開Tomcat をインストールして展開す...

MySQL カウントを向上させる方法のまとめ

多くのプログラマーは MySQL に精通していると思います。多くの人が count の使い方と、最適...

CentOS 7 で RPM パッケージを使用して MySQL 5.7.9 をインストールするチュートリアル

MySQL 5.7.9 のインストールチュートリアルを録画してみんなと共有しましょう環境の紹介:オペ...

CSSを使用してファイルアップロードパターンを描画する

以下に示すように、あなたならどのようにそれを達成しますか: 通常、フォントアイコンを使用して中央にプ...

VMware IOInsight を使用して、仮想マシンのストレージ パフォーマンスの監視を改良する

例: VMware IOInsight は、VM のストレージ I/O 動作を理解するのに役立つツー...

標準的なHTMLの書き方は、Dreamweaverによって自動的に生成されるものとは異なります。

コードをコピーコードは次のとおりです。 <!--doctype はドキュメント タイプ htm...

React Router で履歴リダイレクトを使用する方法

react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...

Linux システムコマンドのメモ

この記事では、Linux システム コマンドについて説明します。ご参考までに、詳細は以下の通りです。...

JavaScript キャンバス テキスト クロック

この記事では、テキストクロックを実装するためのキャンバスの具体的なコードを例として紹介します。具体的...

React dva実装コード

目次ドヴァdvaの使用DVAの実装非同期をサポートルーターの実装成し遂げる:ドヴァdva は、red...