前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Requests - python第三方请求包入门

Requests - python第三方请求包入门

作者头像
copy_left
发布2021-06-21 18:32:31
4830
发布2021-06-21 18:32:31
举报
文章被收录于专栏:方球方球方球

简单例子

# 发送 get 请求
url = 'https://www.baidu.com'
res = requests.get(url)
print(res.text)

安装

pipe install requests

请求方法

get

get(url, params=None, **kwargs)

# 不带参数
get('https://huaban.com/search')
# 带参数
params = { 'q': '赛博朋克' } 
get(url, params)

post

post(url, data=None, json=None, **kwargs)

# 无参数
url= '...'
# data 可以为字典 or 元组

# data 为dict字典
dict_data = {'name': 'coco', 'age': 12}
post(url, data=dict_data)

# data 为元组列表
tulp_data = (('name', 'coco'), ('age', 12)) 
post(url, data=tulp_data)

# 接收json数据
post(url, data=json.dumps(dict_data))
# 直接使用json字段
post(url, json=dict_data)

# 文件上传
def_files = {'file': open('test.text', 'rb')}
post(url, files = def_files)
# 设置文件信息
name_files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
post(url, files = name_files)

options

options(url, **kwargs)

options('http://httpbin.org/get')

head

head(url, **kwargs)

head('http://httpbin.org/get')

put

put(url, data=None, **kwargs)

put('http://httpbin.org/put', data = {'key':'value'})

patch

patch(url, data=None, **kwargs)

put('http://httpbin.org/patch', data = {'key':'value'})

delete

delete(url, **kwargs)

delete('http://httpbin.org/delete')

request

基础请求函数, 其他请求方法都是该方法的包装函数 request (self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None)

# get 请求函数
res = request('get', 'https://www.baidu.com', params={'id': 'xxx'})

获取响应内容

res = get('https://www.baidu.com')
# 文本格式内容
text_content = res.text
# json内容
json_content = res.json
# 二进制内容
byte_content = res.content

# buff流
res = get('https://www.baidu.com', stream=True)
# 读取指定长度内容
r.raw.read(100)
# 读取全部内容
r.raw.read()

响应状态码

r = requests.get('http://httpbin.org/get')
# 获取状态码
print(r.status_code)

# 捕获请求错误, 例如: 404,500 等
r = post('https://www.baidu.com/api')
try:
  # 如果请求错误,将抛出异常
  r.raise_for_status()
except Exception as e:
  print('ERROR: ', e)
内置预设状态码
from requests import get, codes
r = requests.get('http://httpbin.org/get')
print(r.status_code === codes.ok)

codes 列表

codes = {

    # Informational.
    100: ('continue',),
    101: ('switching_protocols',),
    102: ('processing',),
    103: ('checkpoint',),
    122: ('uri_too_long', 'request_uri_too_long'),
    200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
    201: ('created',),
    202: ('accepted',),
    203: ('non_authoritative_info', 'non_authoritative_information'),
    204: ('no_content',),
    205: ('reset_content', 'reset'),
    206: ('partial_content', 'partial'),
    207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
    208: ('already_reported',),
    226: ('im_used',),

    # Redirection.
    300: ('multiple_choices',),
    301: ('moved_permanently', 'moved', '\\o-'),
    302: ('found',),
    303: ('see_other', 'other'),
    304: ('not_modified',),
    305: ('use_proxy',),
    306: ('switch_proxy',),
    307: ('temporary_redirect', 'temporary_moved', 'temporary'),
    308: ('permanent_redirect',
          'resume_incomplete', 'resume',),  # These 2 to be removed in 3.0

    # Client Error.
    400: ('bad_request', 'bad'),
    401: ('unauthorized',),
    402: ('payment_required', 'payment'),
    403: ('forbidden',),
    404: ('not_found', '-o-'),
    405: ('method_not_allowed', 'not_allowed'),
    406: ('not_acceptable',),
    407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
    408: ('request_timeout', 'timeout'),
    409: ('conflict',),
    410: ('gone',),
    411: ('length_required',),
    412: ('precondition_failed', 'precondition'),
    413: ('request_entity_too_large',),
    414: ('request_uri_too_large',),
    415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
    416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
    417: ('expectation_failed',),
    418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
    421: ('misdirected_request',),
    422: ('unprocessable_entity', 'unprocessable'),
    423: ('locked',),
    424: ('failed_dependency', 'dependency'),
    425: ('unordered_collection', 'unordered'),
    426: ('upgrade_required', 'upgrade'),
    428: ('precondition_required', 'precondition'),
    429: ('too_many_requests', 'too_many'),
    431: ('header_fields_too_large', 'fields_too_large'),
    444: ('no_response', 'none'),
    449: ('retry_with', 'retry'),
    450: ('blocked_by_windows_parental_controls', 'parental_controls'),
    451: ('unavailable_for_legal_reasons', 'legal_reasons'),
    499: ('client_closed_request',),

    # Server Error.
    500: ('internal_server_error', 'server_error', '/o\\', '✗'),
    501: ('not_implemented',),
    502: ('bad_gateway',),
    503: ('service_unavailable', 'unavailable'),
    504: ('gateway_timeout',),
    505: ('http_version_not_supported', 'http_version'),
    506: ('variant_also_negotiates',),
    507: ('insufficient_storage',),
    509: ('bandwidth_limit_exceeded', 'bandwidth'),
    510: ('not_extended',),
    511: ('network_authentication_required', 'network_auth', 'network_authentication'),
}

响应头

响应头为字典类型, 不区分大小写

设置request响应头

url = '...'
headers = {'user-agent': 'my-app/0.0.1'}
r = get(url, headers=headers)
查看response响应头
url= 'https://www.baidu.com'  

r = get(url)

# 显示全部字段
print(r.headers)

# 查询指定字段
print(r.headers.get('Content-Type'))

cookie

设置request cookie

url= 'https://www.baidu.com'  

cookies = dict(
  id='xxx',
  name='yyy'
)
r = get(url,cookies=cookies)

获取response cookie

url= 'https://www.baidu.com'  
r = get(url,cookies=cookies)

print(r.cookies, type(r.cookies))
# <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]> <class 'requests.cookies.RequestsCookieJar'>
print(dict(r.cookies))
# {'BDORZ': '27315'}
print(r.cookies.get('BDORZ'))
# 27315

history 历史记录

Requests 将自动处理重定向, history 收集了重定向的请求体

r = get(url,cookies=cookies)
print(r.history)
# []
# 无重定向时,列表为空

timeout 请求超时

# 设置请求超时时长
get('http://github.com', timeout=0.001)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单例子
  • 安装
  • 请求方法
    • get
      • post
        • options
          • head
            • put
              • patch
                • delete
                  • request
                  • 获取响应内容
                  • 响应状态码
                  • codes 列表
                  • 响应头
                    • 设置request响应头
                    • cookie
                      • 设置request cookie
                        • 获取response cookie
                        • history 历史记录
                        • timeout 请求超时
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档