欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用mysql記錄從url返回的http GET請求數(shù)據(jù)操作

 更新時間:2021年01月01日 13:51:00   作者:lee_moonj  
這篇文章主要介紹了使用mysql記錄從url返回的http GET請求數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

業(yè)務場景需求及實現(xiàn)邏輯分析

在業(yè)務中,我們經(jīng)常會碰到需要用HTTP GET請求數(shù)據(jù)的情況,比如http請求返回的結果如下所示:

那么,如果我們想將這些數(shù)據(jù)用mysql存儲下來,那該怎么實現(xiàn)呢?

其實,調(diào)用python的httplib和MySQLdb包將會非常容易實現(xiàn),httplib負責獲取url的返回,MySQLdb負責對MySQL數(shù)據(jù)庫進行操作。下面整理了關系邏輯圖:

那么,我們開始代碼開發(fā):

python依賴包準備

python需要用到的包至少有如下幾個,其中MySQLdb依賴包的安裝可以參考python安裝mysql的依賴包mysql-python

# 此為python文本編輯器界面
#!/usr/bin/python
# coding=utf-8
import httplib
import json
import time
import MySQLdb

用httplib獲取url請求返回

httplib包支持如下的一些方法和函數(shù):

url = "http://www.testtesttest.com/mobile/kit?token=yyyyyyyyy&key=tttttt&size=1" #具體的url鏈接
conn = httplib.HTTPConnection("www.testtesttest.com")
conn.request(method="GET", url=url) #指定GET方法,以及url對象
response = conn.getresponse() #創(chuàng)建response對象
res = response.read() #讀取url返回的內(nèi)容
# 使用json.loads方法將json解碼為python對象
json_repose = json.loads(res)
data = json_repose['data']

此時,http請求返回的所有信息都存在了對象res中,因為請求返回的是json字符串,上面我們采用了json.loads方法來解析。

可以留意到,最終我們將請求返回的json內(nèi)容,都存到了python的對象中里,而一旦將數(shù)據(jù)轉為數(shù)組或者元組等形式儲存,我們就可以用python自帶的函數(shù)對其進行解析或者其他操作了。

用python解析url請求返回的json

# 這里我們定義了一個函數(shù)用于解析json
def data_list_analyze(i):
 data_dict = data[i]
 status = data_dict['status']
 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']))
 return devi_id, imei, device_type, actived_time

python連接數(shù)據(jù)庫并寫入數(shù)據(jù)

接下來是數(shù)據(jù)庫的連接示例:

# 打開數(shù)據(jù)庫連接,指定數(shù)據(jù)庫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 '⾸次激活時間',
PRIMARY KEY(`devi_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
"""
# 使用execute方法執(zhí)行SQL語句,建表
cursor.execute(sql)
# 插入數(shù)據(jù)sql語句
insert_sql = "insert into `gergsmart_list` \
(devi_id,imei,device_type,actived_time) \
values (%s, %s, %s, %s,)"

從上面可以留意到,我們可以將python解析得到的對象devi_id、imei、device_type、actived_time,放入了mysql的插入語句中去,這樣我們就實現(xiàn)了“從url獲取數(shù)據(jù),存到python對象中,再將python對象插入到mysql的記錄中”這樣的操作了。

總結,其實我們可以將python看作為一個中轉器,接收url請求返回,并寫入MySQL。而其中httplib負責了接收操作,MySQLdb負責了寫入操作。

補充:mysql請求超時!延伸拓展至get post請求的區(qū)別是什么,超詳細!一篇足矣解決所有?。?/strong>

將數(shù)據(jù)庫的連接地址從127.0.0.1改為localhost即可!親測有效??!

查閱了很多的資料,歸納總結了get請求和post請求的區(qū)別

做了以下總結:

眾所周知的是get請求的參數(shù)是直接暴露在url上面,安全性較低。post請求的參數(shù)是存放在body里面夾帶過去,安全性較高一點。接下來我們看看稍微全面一點的解釋

我們先看一下前輩們的解釋

一、get和post請求的區(qū)別是什么:

get是從服務器上獲取數(shù)據(jù),post是向服務器傳送數(shù)據(jù)。

get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應,在URL中可以看到。post是通過HTTPpost機制,將表單內(nèi)各個字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。

對于get方式,服務器端用Request.QueryString獲取變量的值,對于post方式,服務器端用Request.Form獲取提交的數(shù)據(jù)。

get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。

get安全性非常低,post安全性較高。

GET 請求可被緩存 POST 請求不會被緩存

GET 請求保留在瀏覽器歷史記錄中 POST 請求不會保留在瀏覽器歷史記錄中

GET 請求可被收藏為書簽 POST 不能被收藏為書簽

GET請求只能進行url編碼(application/x-www-form-urlencoded)POST支持多種編碼方式(application/x-www-form-urlencoded 或 multipart/form-data。為二進制數(shù)據(jù)使用多重編碼。)

最直觀的區(qū)別就是GET把參數(shù)包含在URL中,POST通過request body傳遞參數(shù)。

接下來參考一下官方的說法是什么:

二、在w3schools中也對二者進行了區(qū)分給出了官方的答案

GET在瀏覽器回退時是無害的,而POST會再次提交請求。

GET產(chǎn)生的URL地址可以被Bookmark,而POST不可以。

GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。

GET請求只能進行url編碼,而POST支持多種編碼方式。

GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里,而POST中的參數(shù)不會被保留。

GET請求在URL中傳送的參數(shù)是有長度限制的,而POST么有。

對參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒有限制。

GET比POST更不安全,因為參數(shù)直接暴露在URL上,所以不能用來傳遞敏感信息。

GET參數(shù)通過URL傳遞,POST放在Request body中。

GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。

基于上述以及查閱的資料做一個總結

HTTP是基于TCP/IP的關于數(shù)據(jù)如何在萬維網(wǎng)中如何通信的協(xié)議。 HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP鏈接。GET和POST能做的事情是一樣一樣的。你要給GET加上request body,給POST帶上url參數(shù),技術上是完全行的通的。

post請求和get請求都是HTTP的請求方式,本質(zhì)上來說并無區(qū)別,底層實現(xiàn)都是基于TCP/IP協(xié)議。但是請求有各種各樣的方式,于是HTTP對請求方式進行了劃分和規(guī)定,于是產(chǎn)生了get、post處理請求的分工和區(qū)別。

此外還有搜索到另外一個區(qū)別:GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務器響應200(返回數(shù)據(jù));而對于POST,瀏覽器先發(fā)送header,服務器響應100 continue,瀏覽器再發(fā)送data,服務器響應200 ok(返回數(shù)據(jù))。

GET與POST都有自己的語義,不能隨便混用。

據(jù)研究,在網(wǎng)絡環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視。而在網(wǎng)絡環(huán)境差的情況下,兩次包的TCP在驗證數(shù)據(jù)包完整性上,有非常大的優(yōu)點。

并不是所有瀏覽器都會在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次。

綜述:

“GET方式提交的數(shù)據(jù)最多只能是1024字節(jié)”,因為GET是通過URL提交數(shù)據(jù),那么GET可提交的數(shù)據(jù)量就跟URL的長度有直接關系了。而實際上,URL不存在參數(shù)上限的問題,HTTP協(xié)議規(guī)范沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(jié)(2K+35)。對于其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決于操作系統(tǒng)的支持。注意這是限制是整個URL長度,而不僅僅是你的參數(shù)值數(shù)據(jù)長度。

理論上講,POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進行大小限制,說“POST數(shù)據(jù)量存在80K/100K的大小限制”是不準確的,POST數(shù)據(jù)是沒有限制的,起限制作用的是服務器的處理程序的處理能力。對于ASP程序,Request對象處理每個表單域時存在100K的數(shù)據(jù)長度限制。但如果使用Request.BinaryRead則沒有這個限制。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • 保障MySQL數(shù)據(jù)安全的一些建議

    保障MySQL數(shù)據(jù)安全的一些建議

    這篇文章主要介紹了MySQL數(shù)據(jù)安全的一些建議,幫助大家平時更好的運維數(shù)據(jù)庫,保障數(shù)據(jù)安全,感興趣的朋友可以了解下
    2020-08-08
  • MySQL錯誤:Can‘t?connect?to?MySQL?server?on?localhost解決辦法(分多種情況)

    MySQL錯誤:Can‘t?connect?to?MySQL?server?on?localhost解決辦法

    這篇文章主要給大家介紹了關于MySQL錯誤:Can‘t?connect?to?MySQL?server?on?localhost的解決辦法,文中介紹的方法分多種情況,通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • 教你一招永久解決mysql插入中文失敗問題

    教你一招永久解決mysql插入中文失敗問題

    mysql經(jīng)常會遇到某些中文插入異常,最近有同學反饋了這樣一個問題,所以下面這篇文章主要給大家介紹了關于如何永久解決mysql插入中文失敗問題的相關資料,需要的朋友可以參考下
    2021-11-11
  • Linux下MySQL5.7.18 yum方式從卸載到安裝過程圖解

    Linux下MySQL5.7.18 yum方式從卸載到安裝過程圖解

    這篇文章主要介紹了Linux下MySQL5.7.18 yum方式從卸載到安裝過程圖解,需要的朋友可以參考下
    2017-06-06
  • Mysql使用sum()函數(shù)返回null的問題詳解

    Mysql使用sum()函數(shù)返回null的問題詳解

    MySQL的Sum()函數(shù)是用來找出所有記錄的一個字段的總和,下面這篇文章主要給大家介紹了關于Mysql使用sum()函數(shù)返回null的問題,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • MySQL觸發(fā)器Trigger加載及目前局限性

    MySQL觸發(fā)器Trigger加載及目前局限性

    這篇文章主要為大家介紹了MySQL觸發(fā)器Trigger加載以及目前局限性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 查看MySQL中已經(jīng)創(chuàng)建的存儲過程及其定義

    查看MySQL中已經(jīng)創(chuàng)建的存儲過程及其定義

    在MySQL中,查看已創(chuàng)建存儲過程的方法包括使用SHOW CREATE PROCEDURE命令查看存儲過程定義,查詢INFORMATION_SCHEMA.Routines表或mysql.proc表獲取存儲過程信息,使用source命令執(zhí)行存儲過程創(chuàng)建腳本,或查看存儲過程的文檔注釋,這些方法有助于了解和管理數(shù)據(jù)庫中的存儲過程
    2024-11-11
  • 關于數(shù)據(jù)庫連接池Druid使用說明

    關于數(shù)據(jù)庫連接池Druid使用說明

    這篇文章主要介紹了關于數(shù)據(jù)庫連接池Druid使用說明,涉及Druid 參數(shù)和運行原理等等相關內(nèi)容,小編覺得挺不錯的,在這里給大家分享一下。
    2017-10-10
  • mysql獲得60天前unix時間的方法

    mysql獲得60天前unix時間的方法

    首先根據(jù)now()獲得當前時間,使用adddate()方法獲得60天前時間,使用unix_timestamp()方法轉換時間類型,需要的朋友可以參考下
    2014-09-09
  • 如何查看MySQL數(shù)據(jù)文件存放路徑

    如何查看MySQL數(shù)據(jù)文件存放路徑

    這篇文章主要給大家介紹了關于如何查看MySQL數(shù)據(jù)文件存放路徑的相關資料,文中通過圖文以及代碼示例介紹的非常詳細,對大家學習或者使用mysql具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論