• 用python的Requests库模拟http请求


    一、先了解几个重要的http请求头或响应头信息

    Request Headers:

    Host:
    描述请求将被发送的目的地,包括,且仅仅包括域名和端口号。
    Origin:
    说明请求从哪里发起的,包括,且仅仅包括协议和域名,并没有包含涉及到用户隐私的URL路径和请求内容。可以防止CSRF的攻击。origin只用于Post请求。
    Referer:
    告知服务器请求的原始资源的URI,包括:协议+域名+查询参数(注意,不包含锚点信息)。其用于所有类型的请求。
    因为原始的URI中的查询参数可能包含ID或密码等敏感信息,如果写入referer,则可能导致信息泄露。

    Reponse Headers:

     Location: 重定向之后要跳转的地址

    二、用requests库,模拟http请求:

    1.导入 requests 模块:

    注:如果没有安装,先要通过 pip install requests 安装requests模块

     import requests

     2.发送get请求

    res = requests.get('https://www.baidu.com')

    3.发送带参数的get请求

    payload = {'key1': 'value1', 'key2': 'value2'}
    res = requests.get("http://www.baidu.com", params=payload)

    通过打印输出该 URL,你能看到 URL 已被正确编码:

    print(res.url)
    http://www.baidu.com?key2=value2&key1=value1

    你还可以将一个列表作为值传入:

    payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
    res = requests.get('http://www.baidu.com', params=payload)
    print(res.url)
    http://www.baidu.com?key1=value1&key2=value2&key2=value

    4.发送post请求

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

    (1)通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单,

    对应Content-Type:application/x-www-form-urlencodedmultipart/form-data,默认是前者,multipart/form-data一般是文件上传时使用。

    要实现这个,只需简单地传递一个字典(名称/值对的形式)给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

    payload = {'key1': 'value1', 'key2': 'value2'}
    res = requests.post("http://httpbin.org/post", data=payload)
    print(res.text)
    结果:
    {
      ...
      "form": {
        "key2": "value2",
        "key1": "value1"
      },
      ...
    }

    (2)很多时候你想要发送的数据并非编码为表单形式的,而是json格式的(本质就是字符串),对应Content-Type:application/json。有两种方法:

    方法一:
    import
    json
    url
    = 'https://api.github.com/some/endpoint' payload = {'some': 'data'} res = requests.post(url, data=json.dumps(payload))
    方法二:
    url = 'https://api.github.com/some/endpoint' payload = {'some': 'data'} res = requests.post(url, json=payload)

    三、http请求的响应

    res = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
    任何时候进行了类似 requests.get() 的调用,你都在做两件主要的事情。
    其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源。
    其二,一旦 requests 得到一个从服务器返回的响应就会产生一个 Response 对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的 Request 对象。
    res.headers   --> 服务器返回给我们的响应头部信息
    res.request.headers   --> 发送到服务器的请求的头部信息
    res.status_code  --> 响应状态码
    res.text --> 以文本的方式访问请求响应体
    res.content  --> 以字节(二进制)的方式访问请求响应体
    res.url  -->  服务器接收到的请求URL
    res.cookies  --> 响应返回的cookies,返回对象为<RequestsCookieJar[xxxx]>
    res.history -->  响应对象的 history 方法来追踪重定向
    res.history[0].headers.get('Set-Cookie') 
     
  • 相关阅读:
    EasyPlayer RTSP Android安卓播放器实现视频源快速切换
    EasyPlayer RTSP Android安卓播放器实现视频源快速切换
    使用EasyPusher进行手机低延时直播推流便捷开发
    使用EasyPusher进行手机低延时直播推流便捷开发
    EasyPlayerPro windows播放器之多窗口播放音量控制方法
    EasyPlayerPro windows播放器之多窗口播放音量控制方法
    EasyPlayerPro windows播放器本地音频播放音量控制实现
    EasyPlayerPro windows播放器本地音频播放音量控制实现
    EasyPlayerPro Windows播放器进行本地对讲喊话音频采集功能实现
    EasyPlayerPro Windows播放器进行本地对讲喊话音频采集功能实现
  • 原文地址:https://www.cnblogs.com/janson071/p/10395779.html
Copyright © 2020-2023  润新知