Python学习笔记-Requests

1、安装

终端cmd 输入:

pip install requests

2、发送请求

import requests

>>> r=requests.get( 'https://github.com/timeline.json' )

>>> r=requests.post( "http://httpbin.org/post" )

>>>r=requests.put("http://httpbin.org/put")

>>>r=requests.delete("http://httpbin.org/delete")

>>>r=requests.head("http://httpbin.org/get")

>>>r=requests.options("http://httpbin.org/get")

3、传递参数

URL参数可直接跟在问号后,置于URL之后,如:httpbin.org/get?key=val,除此以外,

get方法:

>>>payload={'key1':'value1','key2':'value2'}

>>>r=requests.get("http://httpbin.org/get",params=payload)

post方法:

>>>payload={'key1':'value1','key2':'value2'}

>>>r=requests.post("http://httpbin.org/post",data=payload)

其中,若请求参数为json:先将参数转化为json格式(json.dumps())

>>>import  json

>>>url = ' https://api.github.com/some/endpoint '

>>>payload = {'some':'data'}

>>>r =requests.post (url,data=json.dumps(payload))

2.4.2版本之后可直接使用json参数传递

>>>url = 'https://api.github.com/some/endpoint'

>>>payload = {'some':'data'}

>>>r = requests.post (url, json=payload)

上传文件参数(Multipart-Encoded):

>>>url = 'http://httpbin.org/post'

>>>files = { 'file' : open('report.xls','rb') }

>>>r = requests.post(url, files=files)

4、响应内容

>>>importrequests

>>>r=requests.get('https://github.com/timeline.json')

>>>r.text

u'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。

请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests 会使用其推测的文本编码。

也能以字节的方式访问请求响应体,对于非文本请求:

>>>r.content

b'[{"repository":{"open_issues":0,"url":"https://github.com/...

Requests 会自动为你解码gzip和deflate传输编码的响应数据。

例如,以请求返回的二进制数据创建一张图片,你可以使用如下代码:

>>>from  PIL  import  Image

>>>from  io  import  BytesIO

>>>i = Image.open(BytesIO(r.content))

Requests 中也有一个内置的 JSON 解码器,来处理 JSON 数据:

>>>import  requests

>>>r = requests.get('https://github.com/timeline.json')

>>>r.json()

[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

>>>r.json()['url']           #获取json属性值

如果 JSON 解码失败,r.json()就会抛出一个异常。例如,相应内容是 401 (Unauthorized),尝试访问r.json()将会抛出ValueError:NoJSONobjectcouldbedecoded异常。

5、定制请求头

>>>url = 'https://api.github.com/some/endpoint'

>>>headers = {'user-agent':'my-app/0.0.1'}

>>>r = requests.get(url, headers=headers)

注意: 定制 header 的优先级低于某些特定的信息源,例如:

       如果在.netrc中设置了用户认证信息,使用headers=设置的授权就不会生效。而如果设置了               auth=参数,``.netrc`` 的设置就无效了。

        如果被重定向到别的主机,授权 header 就会被删除。

        代理授权 header 会被 URL 中提供的代理身份覆盖掉。

         在我们能判断内容长度的情况下,header 的 Content-Length 会被改写。

更进一步讲,Requests 不会基于定制 header 的具体情况改变自己的行为。只不过在最后的请求中,所有的 header 信息都会被传递进去。

注意: 所有的 header 值必须是string、bytestring 或者 unicode。尽管传递 unicode header 也是允许的,但不建议这样做。

6、响应状态码

>>>r=requests.get('http://httpbin.org/get')

>>>r.status_code

200

如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过Response.raise_for_status()来抛出异常:

>>>bad_r=requests.get('http://httpbin.org/status/404')

>>>bad_r.status_code

404

>>>bad_r.raise_for_status()

Traceback (most recent call last):File"requests/models.py", line832, in raise_for_statusraisehttp_error

requests.exceptions.HTTPError:404 Client Error

7、响应头

>>>r.headers

{'content-encoding': 'gzip','transfer-encoding': 'chunked','connection': 'close','server': 'nginx/1.0.4','x-runtime': '148ms','etag': '"e1ca502697e5c9317743dc078f67693f"','content-type': 'application/json'}

8、Cookie

响应中包含cookie,可快速访问

>>>url='http://example.com/some/cookie/setting/url'

>>>r=requests.get(url)

>>>r.cookies['example_cookie_name']

'example_cookie_value'

也使用cookie参数,发送cookie到服务器,

>>>url='http://httpbin.org/cookies

'>>>cookies=dict(cookies_are='working')

>>>r=requests.get(url, cookies=cookies)

>>>r.text

'{"cookies": {"cookies_are": "working"}}'

9.其他

重定向和请求历史:

默认情况下,除了 HEAD, Requests 会自动处理所有重定向。

可以使用响应对象的history方法来追踪重定向。

Response.history是一个Response对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。

例如,Github 将所有的 HTTP 请求重定向到 HTTPS:

>>>r=requests.get('http://github.com')

>>>r.url'https://github.com/'

>>>r.status_code200

>>>r.history

[< Response [301]>]

如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通过allow_redirects参数禁用重定向处理:

>>>r =requests.get('http://github.com', allow_redirects=False)

>>>r.status_code

301

超时

你可以告诉 requests 在经过以timeout参数设定的秒数时间之后停止等待响应:

>>>requests.get('http://github.com',timeout=0.001)

注意

timeout仅对连接过程有效,与响应体的下载无关。timeout并不是整个下载响应的时间限制,而是如果服务器在timeout秒内没有应答,将会引发一个异常(更精确地说,是在timeout秒内没有从基础套接字上接收到任何字节的数据时)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 目录: Python网络爬虫(一)- 入门基础Python网络爬虫(二)- urllib爬虫案例Python网络爬...
    一只写程序的猿阅读 12,713评论 17 68
  • 1.发送请求: import requests # 获取数据 #r是一个 response 对象。包含请求返回的内...
    阿尔卑斯山上的小灰兔阅读 1,368评论 0 3
  • 深夜回到家,屋中一片漆黑,不是伸手不见五指,只是家具只有背影。 不想开灯,太累了,想躺一躺。 可躺在床上,时间过了...
    李一十八阅读 271评论 0 0
  • 二零一七年九月八日,傍晚五点二十七分 在资本家戴女士威逼利诱之下,劳工阿戴开始了苦逼的创作。 事情是怎样发生的...
    寄北北阅读 673评论 0 0