python3.6 urllib和requests简单用法

2018-03-23  本文已影响0人  dongshixiao

python3.6 urllib简单用法,主要是想和requests做对比

1.urllib(自带)

from urllib import request
import urllib
import json

URL_IP = 'http://httpbin.org/ip'
URL_GET = 'http://httpbin.org/get'

# GET 简单请求一个获取ip的url
def simple_ip_request():
    response = request.urlopen(URL_IP)
    print("返回请求:")
    print(response.info())
    print(json.loads(response.read()))

# GET 带参数
def simple_get_request():
    # 参数
    params = urllib.parse.urlencode({'param1': 'hello', 'param2': 'world'})
    response = request.urlopen('?'.join([URL_GET, "%s"]) % params)
    print(response.info())
    print(response.getcode())
    print(json.loads(response.read()))

# if __name__=='__main__':
simple_ip_request()
simple_get_request()

OUT:

返回请求:
Connection: close
Server: meinheld/0.6.1
Date: Mon, 22 Jan 2018 06:52:35 GMT
Content-Type: application/json
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Powered-By: Flask
X-Processed-Time: 0.000494003295898
Content-Length: 32
Via: 1.1 vegur

{'origin': '49.80.163.208'}
Connection: close
Server: meinheld/0.6.1
Date: Mon, 22 Jan 2018 06:52:35 GMT
Content-Type: application/json
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Powered-By: Flask
X-Processed-Time: 0.00118207931519
Content-Length: 309
Via: 1.1 vegur

200
{'args': {'param1': 'hello', 'param2': 'world'}, 'headers': {'Accept-Encoding': 'identity', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'Python-urllib/3.6'}, 'origin': '49.80.163.208', 'url': 'http://httpbin.org/get?param1=hello&param2=world'}

Process finished with exit code 0

2.requests(没有的话需要:pip install requests)

import requests

URL_IP = 'http://httpbin.org/ip'
URL_GET = 'http://httpbin.org/get'

# GET 简单请求一个获取ip的url
def simple_ip_request():
    response = requests.get(URL_IP)
    print(response.headers)
    print(response.json())

# GET 带参数
def simple_get_request():
    # 参数
    params = {'param1': 'hello', 'param2': 'world'}
    response = requests.get(URL_GET,params=params)
    print(response.headers)
    print(response.json())

# if __name__=='__main__':
simple_ip_request()
simple_get_request()

OUT:

{'Connection': 'keep-alive', 'Server': 'meinheld/0.6.1', 'Date': 'Mon, 22 Jan 2018 07:09:31 GMT', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'X-Powered-By': 'Flask', 'X-Processed-Time': '0.000584125518799', 'Content-Length': '32', 'Via': '1.1 vegur'}
{'origin': '49.80.163.208'}
{'Connection': 'keep-alive', 'Server': 'meinheld/0.6.1', 'Date': 'Mon, 22 Jan 2018 07:09:32 GMT', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'X-Powered-By': 'Flask', 'X-Processed-Time': '0.000766038894653', 'Content-Length': '341', 'Via': '1.1 vegur'}
{'args': {'param1': 'hello', 'param2': 'world'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}, 'origin': '49.80.163.208', 'url': 'http://httpbin.org/get?param1=hello&param2=world'}

2.1 requests的异常

import requests
from requests import exceptions
import json

URL = 'https://api.github.com'

def build_url(endpoint):
    return '/'.join([URL, endpoint])

# GET 简单请求一个获取ip的url
def simple_request():
    try:
        response = requests.get(build_url('user/emails'), timeout=1)
        response.raise_for_status()
    except exceptions.Timeout as e:
        print(e)
    except exceptions.HTTPError as e:
        print(e)
    else:
        print(response.text)
        print(response.status_code)

simple_request()

OUT:

401 Client Error: Unauthorized for url: [https://api.github.com/user/emails](https://api.github.com/user/emails)

2.2 requests 下载图片

import requests
URL = 'http://vpp5.com/ueditor/php/upload/image/20170522/1495439095647174.png'
headers = {
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
}
response = requests.get(URL, headers=headers, stream=True)
with open('demo.jpg','wb') as f:
    for chuck in response.iter_content(128):
        f.write(chuck)
上一篇下一篇

猜你喜欢

热点阅读