python 网络请求类库 requests 使用

python 网络请求类库 requests 使用

requests是 为python封装的强大 REST 操作类库

1: 安装,请使用 pip,或是 easy_install 工具

     sudo pip install requests

2: 使用 先

    import requests

   

#coding=utf-8
#要加上编码设置,不然编译不通过,这是python2的问题

'''
Created on 2014年4月22日

@author: dev.keke@gmail.com
'''

#测试 request库环境,python2.7环境

import requests   

#GET 请求
r = requests.get('http://httpbin.org/get')
print 'GET:',r.text

#POST 请求
r = requests.post('http://httpbin.org/post')
print 'POST',r.text

#GET 带参数请求,
pararms = {'key1':'value1','key2':'value2'}
r = requests.get('http://httpbin.org/get',params=pararms)
print 'GET Pararms',r.url,r.text

#POST 带参数请求,
parar={'key1':'value1','key2':'value2'}
r = requests.post('http://httpbin.org/post',params = parar)
print 'POST Pararms:',r.url,r.text

#改变响应数据的编码 
r.encoding = 'ISO-8859-1'

#取得响应的二进制数据
r.content

#取得json数据,如果数据json处理失败,会抛出异常
r.json()

#响应原始数据内容,注意设置 r = requests.get('https://github.com/timeline.json', stream=True) tream = True
r.raw #原数据内容

3:一些更为复杂的操作

   定制请求头

>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> headers = {'content-type': 'application/json'}

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

  复杂的post请求

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

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

上传文件

>>> url = 'http://httpbin.org/post'
>>> files = {'file': open('report.xls', 'rb')}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "<censored...binary...data>"
  },
  ...
}
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.xls', open('report.xls', 'rb'))}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "<censored...binary...data>"
  },
  ...
}
>>> url = 'http://httpbin.org/post'
>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}

>>> r = requests.post(url, files=files)
>>> r.text
{
  ...
  "files": {
    "file": "some,data,to,send\\nanother,row,to,send\\n"
  },
  ...
}

响应状态码:

内置状态码:

>>> r.status_code == requests.codes.ok
True

根据状态码抛出异常

>>> 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", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

查看响应头

>>> r.headers
{
    'status': '200 OK',
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '148ms',
    'etag': '"e1ca502697e5c9317743dc078f67693f"',
    'content-type': 'application/json; charset=utf-8'
}

设置请求超时时间

>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

 

参考:http://cn.python-requests.org/zh_CN/latest/user/quickstart.html

posted @ 2014-04-22 14:55  cocoajin  阅读(1854)  评论(0编辑  收藏  举报