ビジネスシナリオの要件と実装ロジックの分析ビジネスでは、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 を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: JavaScript が Xiaomi のカルーセル効果を模倣
>>: Spring Boot 2.4 の新機能、ワンクリックビルド、Docker イメージプロセスの詳細説明
序文フッター領域を下部に固定します。ページの高さや幅に関係なく、モバイル メニューと同様に、フッター...
HTML メールを送信するためのヒント: スタイルを使用してインライン CSS を記述する、使用する...
この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安全か...
目次1. インストール前の準備、インストールパッケージのダウンロード1 インストールの準備2 インス...
ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...
日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...
目次1. プロジェクトフォルダ構造1. アセットフォルダ2. 図書館3. ローカル設定(ローカル) ...
ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...
この記事では、参考までに、ファイルのオンラインプレビューを実現するためのvue-pdfの具体的なコー...
目次1. ElementUIで基本的なスタイルを構築する2. [送信]ボタンをクリックして、アカウン...
Node.js の人気に応えて、最近、いくつかのサーバー側機能を実装するために Node.js を使...
コラムを更新してからどれくらい経ったでしょうか?半年ですか?今年の後半は、まさに離陸、つまり文字通り...
MySQL ストアド プロシージャ1. ストアドプロシージャ構文(フォーマット)を作成する 区切り文...
本日、ゲームを再起動した後、バックアップしたデータをターゲットデータベースにインポートできないことが...
(1)実験環境youxi1 192.168.5.101 ロードバランサーyouxi2 192.168...