zoukankan      html  css  js  c++  java
  • Request

    requests的基本使用:

    response = requests.get("http://httpbin.org")

    带参数的get请求:

    方法1:
    response = requests.get("http://httpbin.org/get?name=gemey&age=22")    # 参数和地址用?号隔开,参数之间用&连接
    
    方法2:
    data = {"name":"germey","age":22}
    response = requests.get("http://httpbin.org/get",params=data)
    print(response.text)  # 读取response的内容。

    解析json

    response = requests.get("http://httpbin.org/get")
    print(response.text)
    print(type(response.text))    # <class 'str'>
    print(response.json())
    print(type(response.json()))    # <class 'dict'>

    获取二进制数据

    response = requests.get("https://github.com/favicon.ico")
    print(type(response.text),type(response.content))   # <class 'str'> <class 'bytes'>
    print(response.text)
    print(response.content)
    with open("logo.ico","wb") as f:
        f.write(response.content)
        f.close()

    添加headers

    headers = {"user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}
    response = requests.get("https://www.zhihu.com/explore",headers = headers)
    print(response.text)

    响应

    response属性

    response = requests.get("http://www.jianshu.com",headers = headers)
    print(type(response.status_code),response.status_code)
    print(type(response.headers),response.headers)
    print(type(response.cookies),response.cookies)
    print(type(response.url),response.url)
    print(type(response.history),response.history)

    高级操作

    文件上传

    files = {"file":open("logo.ico","rb")}
    response = requests.post("http://httpbin.org/post",files=files)
    print(response.text)

    获取cookie

    response = requests.get("https://www.baidu.com")
    print(response.cookies)
    for key,value in response.cookies.items():
        print(key +"=" +value)

    会话维持

    s = requests.Session()
    s.get("http://httpbin.org/cookies/set/number/123456789")    # 这一步是自己设置一个cookies,访问真正网站时这个是由网站自己生成的,不需要此步操作
    response = s.get("http://httpbin.org/cookies")    # 这一步才是真正获取cookies
    print(response.text)    

    证书验证:

    对于一些https的网站,需要证书验证,如果该网站证书不是官网的,那么请求就会报错,如果想不报错,则取消证书验证。

    response = requests.get("https://www.12306.cn",verify = False)
    print(response.status_code)

    虽然上面的方法能够跳过验证,正常访问,但还是会有一句警告信息,使用下面方法取消警告信息:

    from requests.packages import urllib3
    urllib3.disable_warnings()
    response = requests.get("https://www.12306.cn",verify = False)
    print(response.status_code)

    代理设置

    proxies = {
        "http":"http://127.0.0.1:9743",
        "https":"https://127.0.0.1:9743"
    }
    response = requests.get("https://www.taobao.com",proxies = proxies)
    print(response.status_code)

    如果代理是有用户名和密码的,可以使用下面格式:

    proxies = {
        "http":"http://user:password@127.0.0.1:9743"
    }
    response = requests.get("https://www.taobao.com",proxies = proxies)
    print(response.status_code)

    超时设置

    response = requests.get("http://httpbin.org/get",timeout = 0.5)
    print(response.status_code)

    超时设置,异常捕获

    from requests.exceptions import ReadTimeout
    try:
        response = requests.get("http://httpbin.org/get",timeout = 0.5)
        print(response.status_code)
    except ReadTimeout:
        print("Timeout")

    认证设置:有些网站打开的时候就需要输入用户名密码才能看到内容,这时就需要这个。

    from requests.auth import HTTPBasicAuth
    r = requests.get("http://120.27.34.24:9001",auth=HTTPBasicAuth("user","123"))
    print(r.status_code)

    异常处理:

    import requests
    from requests.exceptions import ReadTimeout,ConnectionError,RequestException
    try:
        response = requests.get("http://httpbin.ort/get",timeout = 0.5)
        print(response.status_code)
    except ReadTimeout:
        print("TimeOut")
    except ConnectionError:
        print("Connection error")
    except RequestException:
        print("Error")

    Requests获取连接的IP地址

    1 import requests
    2 
    3 rsp = requests.get("http://www.baidu.com", stream=True)  # 要想下面的方法有结果,必须设置stream=True,不然会报错。
    4 print rsp.raw._connection.sock.getpeername()[0]
    5 print rsp.raw._connection.sock.getsockname()[0]
  • 相关阅读:
    我的学习之路_第十二章_多线程
    我的学习之路_第十一章_字符流
    我的学习之路_第十章_IO流
    我的学习之路_第九章_File类,递归
    cordova的安装
    webapp之初次接触cordova
    mac自带终端常用命令(我自己经常会用到的)
    AJAX初识
    前端适配之细说rem(网易的移动端页面布局做法)
    移动端网页开发三(纠结适配的那些年)
  • 原文地址:https://www.cnblogs.com/sq5288/p/9492948.html
Copyright © 2011-2022 走看看