API相關(guān)基礎(chǔ)

request返回列表

  • 200 一切正常,返回為一個(gè)標(biāo)準(zhǔn)結(jié)果
  • 301 重定向到一個(gè)已經(jīng)修改了的域名結(jié)果去
  • 401 服務(wù)認(rèn)為你沒(méi)有被授權(quán),沒(méi)有拿到一個(gè)正確的credentials (證書(shū))來(lái)訪(fǎng)問(wèn)這個(gè)API
  • 400 服務(wù)器認(rèn)為是一個(gè)bad request,沒(méi)有傳送接口需要的request形式
  • 403 你傳送的信息是被禁止的 吱殉,或者你沒(méi)有權(quán)限查看
  • 404 你訪(fǎng)問(wèn)的資源服務(wù)器沒(méi)有查找到,資源被刪除

import requests
requests.get會(huì)返回request類(lèi)型的變量:
屬性status_code表示request返回標(biāo)簽值

request = requests.get("http://api.open-notify.org/iss-now.json:)
status = request.status_code
print(status)

Output
404

在請(qǐng)求中增加參數(shù),使用params 來(lái)賦值一個(gè)字典

dic = {"lat": 37.78,"lon":-122.41}
response = requests.get("http://api.open-notify.org/iss-pass.json",params = dic)
content = response.content
print(content)

import json
json庫(kù)包含兩個(gè)轉(zhuǎn)換方法

  • dumps 把python類(lèi)型數(shù)據(jù)轉(zhuǎn)換承string
  • loads 把string類(lèi)型數(shù)據(jù)轉(zhuǎn)換成python類(lèi)型
conan = ["xiaolan","huiyuan","guangyan"]
conan_string = json.dumps(conan)
print(type(conan_string))
conan_origin = json.loads(conan_string)
print(type(conan_origin))

output
<class 'str'>
<class 'list'>

.json()可以將取到的response轉(zhuǎn)化為Python object,用例將mock_requests.Response型轉(zhuǎn)化為了dict型

parameters = {"lat": 37.78, "lon": -122.41}
response = requests.get("http://api.open-notify.org/iss-pass.json", params=parameters)
json_data = response.json()
print(type(json_data))
print(json_data)
first_pass_duration = json_data["response"][0]["duration"]
print(first_pass_duration)

output
<class 'dict'>
{'message': 'success', 'response': [{'duration': 369, 'risetime': 1441456672}, {'duration': 626, 'risetime': 1441462284}, {'duration': 581, 'risetime': 1441468104}, {'duration': 482, 'risetime': 1441474000}, {'duration': 509, 'risetime': 1441479853}], 'request': {'latitude': 37.78, 'longitude': -122.41, 'datetime': 1441417753, 'altitude': 100, 'passes': 5}}
369

部分response中包含status code和data各種部分抓谴,這些信息可以通過(guò).headers提取

print(response.headers)
print(type(response.headers))
content_type = response.headers["content-type"]
print(content_type)

output
{'date': 'Sat, 05 Sep 2015 01:49:13 GMT', 'connection': 'keep-alive', 'via': '1.1 vegur', 'server': 'gunicorn/19.3.0', 'content-type': 'application/json', 'content-length': '520'}
<class 'dict'>
application/json

一個(gè)從astros.json取值的例子


image.png
response = requests.get("http://api.open-notify.org/astros.json")
res = response.json()
in_space_count = res["number"]
print(in_space_count)

output
9

大部分requests是需要Authorization的扣泊,在請(qǐng)求中通常添加headers參數(shù)來(lái)傳遞授權(quán)信息
headers的格式通常為:

{"Authorization": "token 1f36137fbbe1602f779300dad26e4c1b7fbab631"}

headers = {"Authorization": "token 1f36137fbbe1602f779300dad26e4c1b7fbab631"}
response = requests.get("https://api.github.com/users/VikParuchuri/orgs",headers = headers)
orgs = response.json()
print(orgs)

Pagination
params中需要包含兩個(gè)參數(shù)售担,page和per_page,page標(biāo)注要顯示第幾頁(yè)曼追,per_page標(biāo)注一頁(yè)顯示多少條內(nèi)容,傳送參數(shù)無(wú)論任何內(nèi)容都需要參數(shù)params,無(wú)論是這次的pagination萧福,或者是以后的time拉鹃,具體代碼如下

params = {"per_page": 50, "page": 2}
response = requests.get("https://api.github.com/users/VikParuchuri/starred", headers=headers, params=params)
page2_repos = response.json()
print(page2_repos)

output
[{'hooks_url': 'https://api.github.com/repos/snowplow/snowplow/hooks', 'git_url': 'git://github.com/snowplow/snowplow.git', 'watchers_count': 2183, 'homepage': 
...

POST

post請(qǐng)求中攜帶json變量,創(chuàng)建一個(gè)名為test的庫(kù)在repos目錄下如下

payload = {"name": "test"}
requests.post("https://api.github.com/user/repos", json=payload)

返回的response的參數(shù)status_code可以表示返回類(lèi)型,其中header依舊是上文中的授權(quán)用戶(hù)
下面創(chuàng)建名為learning-about-apis的庫(kù)

payload = {"name":"learning-about-apis"}
response = requests.post("https://api.github.com/user/repos",json = payload,headers = headers)
status = response.status_code
print(status)

output
201

PATCH

給庫(kù)打補(bǔ)丁鲫忍,使用patch命令膏燕,這里需要注意的是post的url是一個(gè)上層目錄,post之后將新建name:test即test的庫(kù)目錄悟民,如post代碼中內(nèi)容就是新建了repos/learning-about-apis這個(gè)目錄坝辫,而patch目錄的操作url就是
https://api.github.com/repos/VikParuchuri/learning-about-apis,來(lái)修改learning-about-apis的描述射亏,故patch的使用針對(duì)于已經(jīng)存在的目錄近忙,目錄位置一般都是url的最后文件名(basename)竭业,代碼如下

payload = {"description": "Learning about requests!","name":"learning-about-apis"}
response = requests.patch("https://api.github.com/repos/VikParuchuri/learning-about-apis",json=payload,headers=headers)
status = response.status_code
print(status)

output
200

DELETE

刪除一個(gè)目錄不需要再帶json參數(shù)傳payload,只需直接刪除想要?jiǎng)h除的repos即可及舍,下面代碼就是刪除learning-about-apis庫(kù)未辆,代碼如下

response = requests.delete("https://api.github.com/repos/VikParuchuri/learning-about-apis",headers = headers)
status = response.status_code
print(status)

output
204
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锯玛,隨后出現(xiàn)的幾起案子咐柜,更是在濱河造成了極大的恐慌,老刑警劉巖攘残,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拙友,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡歼郭,警方通過(guò)查閱死者的電腦和手機(jī)遗契,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)病曾,“玉大人牍蜂,你說(shuō)我怎么就攤上這事√┩浚” “怎么了捷兰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)负敏。 經(jīng)常有香客問(wèn)我贡茅,道長(zhǎng),這世上最難降的妖魔是什么其做? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任顶考,我火速辦了婚禮,結(jié)果婚禮上妖泄,老公的妹妹穿的比我還像新娘驹沿。我一直安慰自己,他們只是感情好蹈胡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布渊季。 她就那樣靜靜地躺著,像睡著了一般罚渐。 火紅的嫁衣襯著肌膚如雪却汉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天荷并,我揣著相機(jī)與錄音合砂,去河邊找鬼。 笑死源织,一個(gè)胖子當(dāng)著我的面吹牛翩伪,可吹牛的內(nèi)容都是我干的微猖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缘屹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凛剥!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起轻姿,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤当悔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后踢代,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗅骄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年胳挎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溺森。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慕爬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屏积,到底是詐尸還是另有隱情医窿,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布炊林,位于F島的核電站姥卢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渣聚。R本人自食惡果不足惜独榴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奕枝。 院中可真熱鬧棺榔,春花似錦、人聲如沸隘道。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谭梗。三九已至忘晤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間激捏,已是汗流浹背德频。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缩幸,地道東北人壹置。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓竞思,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钞护。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盖喷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容