一. 安装
pip install requests
easy_install requests
二.常用方法
1.GET 方法:url, params=None, **kwargs
#1.无参数
ret=requests.get(url="http://httpbin.org/get")
print(ret.url)
print(ret.text)
#2.params参数
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.get(url="http://httpbin.org/get",params=payload)
print(ret.url)
print(ret.text)
2. POST 方法:url, data=None, json=None, **kwargs
#1.params参数,参数追加到url后面
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",params=payload)
print(ret.url)
print(ret.text)
#2.data参数,需要设置Content-Type,默认是None
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",data=payload)
print(ret.url)
print(ret.text)
#3.json参数,如果参数为JSON数据,
# 可以直接传入json参数,
# 它将自动编码并将Content-Type的置为application/json
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload)
print(ret.url)
print(ret.text)
#4.headers参数,参数值为JSON数据,
header={'key':'value'}
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload,headers=header)
print(ret.url)
print(ret.text)
#5.cookies参数,如果参数为JSON数据,
#json
cookie={'key':'value'}
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload,cookies=cookie)
print(ret.url)
print(ret.text)
#cookjar
from http.cookiejar import CookieJar, Cookie
obj = CookieJar()
obj.set_cookie(Cookie(version=0, name='c1', value='v1', port=None, domain='', path='/', secure=False, expires=None,
discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False,
port_specified=False, domain_specified=False, domain_initial_dot=False, path_specified=False)
)
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload,cookies=obj)
print(ret.url)
print(ret.text)
#6.files参数,
#指定参数
file={'uploadFileParams':('fileName',open('1.txt','rb'),'fileType')}
ret=requests.post(url="http://httpbin.org/post",files=file)
print(ret.url)
print(ret.text)
3. requests.request()所有的请求方法实质都是实现重写了request()方法
#1.timeout参数,请求的超时时间
ret=requests.request('POST',url='http://httpbin.org/pos',timeout=15)
print(ret.url)
print(ret.text)
#2.verify参数,是否可以使用CA证书,默认True
ret=requests.request('POST',url='http://httpbin.org/pos',verify=True)
print(ret.url)
print(ret.text)
#3.proxies参数,请求代理
proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"}
ret=requests.request('POST',url='http://httpbin.org/pos',verify=True)
print(ret.url)
print(ret.text)
4.Response对象
rq=requests.request('POST',url='http://httpbin.org/pos',timeout=15)
print('请求返回的状态:{}'.format(rq.status_code))
print('请求的方式:{}'.format(rq.request))
print('请求的url:{}'.format(rq.url))
print('响应的header:{}'.format(rq.headers))
print('响应的cookie:{}'.format(rq.cookies))
print('服务端返回的content主体:{}'.format(rq.content))
print('服务端返回的文本'.format(rq.text))
print('服务端返回的内容转换成json'.format(rq.json()))
print('触发http异常'.format(rq.raise_for_status()))
三.扩展知识:
#1.http 响应码
00: ('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'),
#2.header的 Content-Type
header(‘Content-Type: text/plain’); // plain text file
header(‘Content-Type: image/jpeg’); // JPG picture
header(‘Content-Type: application/zip’); // ZIP file
header(‘Content-Type: application/pdf’); // PDF file
header(‘Content-Type: audio/mpeg’); // Audio MPEG (MP3,…) file
header(‘Content-Type: application/x-shockwave-flash’); // Flash animation
#3. 文件类型