专栏首页python3requests-代理设置,超时设置,登陆验证,Prepared Requests

requests-代理设置,超时设置,登陆验证,Prepared Requests

对于某些网站,大规模频繁请求,网站可能会弹出验证码,或者跳转到登陆认证页面,甚至可能会被直接封客户端ip,导致短时间内无法访问,这个时候就需要用到代理ip。

requests是能解决这个问题的,需要用到proxies参数,示例如下:

import requests

proxies = {
    "http": 'http://123.123.123.10:5566',
    "https": 'https://123.123.123.10:443',
}

requests.get("https://www.baidu.com", proxies=proxies)

上面代理地址换成有效代理地址即可

验证代理配置

import requests

proxies = {
    "http": 'http://user:password@123.123.123.10:5566/',
}

requests.get("https://www.baidu.com", proxies=proxies)

requests还支持socks协议的代理

需要安装socks这个库

pip3 install 'requests[socks]'

示例代码:

import requests

proxies = {
    "http": 'socks5://user:password@123.123.123.10:5566/',
    "https": 'socks5://user:password@123.123.123.10:5566/',
}

requests.get("https://www.baidu.com", proxies=proxies)

requests超时设置

在本机网络状况不好或服务器网络响应太慢甚至无法响应的时候,应该设置一个超时时间,需要用到timeout参数。

将超时时间设置为0.1秒,如果0.1秒内没有响应,就会抛出异常。

import requests
r = requests.get('https://www.alibaba.com', timeout=0.1)
print(r.status_code)

返回信息:

requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.alibaba.com', port=443): Read timed out. (read timeout=0.1)

实际上,请求分为两个阶段,即连接(connect)和读取(read)。设置的timeout将作用于连接和读取这两个的timeout总和,也可以分别指定,传入一个元组:

import requests
r = requests.get('https://www.alibaba.com', timeout=(1, 1))
print(r.status_code)

如果想永久等待,可以将timeout设置为None,或者不设置直接留空,默认为None,如果服务器响应很慢,就慢慢等待,不会返回超时错误,用法如下:

import requests
r = requests.get('https://www.alibaba.com', timeout=None)
print(r.status_code)

r1 = requests.get('https://www.alibaba.com')
print(r1.status_code)

requests登陆验证(身份认证)

在访问网站时,可能会遇到认证页面,此时可以使用requests自带的身份认证功能,示例:

import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))
print(r.status_code)

# 默认使用HTTPBasicAuth这个类来认证
r1 = requests.get('http://localhost:5000', auth=('username', 'password'))
print(r1.status_code)

此外,requests还提供了其他认证方式,OAuth认证,此时需要安装oauth包

pip3 install requests_oauthlib

示例代码:

import requests
from requests_oauthlib import OAuth1

url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('your_app_key', 'your_app_secret', 'your_oauth_token', 'user_oauth_token_secret')
requests.get(url, auth=auth)

Prepared Requests

可以将请求表示为数据结构,其中各个参数都可以通过一个Request对象来表示,这个数据结构就叫Prepared Requests。

示例:

from requests import Request, Session

url = 'http://httpbin.org/post'
data = {
    'name': 'zhangsan',
    'age': '22',
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
s = Session()
req = Request('POST', url=url, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)

返回信息:

引入了Request,用url,data,headers参数构造了一个Request对象,需要再调用Seesion的prepare_request()方法将其转换为一个Prepared Requests对象,然后用send()方法发送即可,可以看到同样达到了POST请求效果。

有了Request这个对象,就可以将请求当作独立的对象来看待,这样在进行队列调度时会非常方便。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3网络爬虫实战-25、req

    在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的...

    py3study
  • python Requests 初级

    Requests 是用Python语言编写,基于 urllib,但是它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Req...

    py3study
  • python模块requests的安装

    py3study
  • python requests提示警告InsecureRequestWarning

    hankleo
  • Python网络爬虫与信息抽取笔记02 requests库入门

    WZEARW
  • Python3网络爬虫实战-25、req

    在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的...

    py3study
  • Python爬虫--- 1.1请求库的安装与使用

    原文链接:https://www.fkomm.cn/article/2018/7/16/16.html

    圆方圆PYTHON学院
  • Python爬虫--- 1.1请求库的安装与使用

    http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

    緣來
  • python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

    分析:由于报错SSL证书验证失败,所以这次的访问应该是https协议.但是我们明明使用的是http,所以,猜测访问该网站后,被重定向到了https://www....

    用户1214487
  • Python接口测试环境搭建过程详解

    砸漏

扫码关注云+社区

领取腾讯云代金券