http请求模块

自己写了个http请求模板,方便爬虫调取。# coding:utf-8
import requests
from fake_useragent import UserAgent
from random import choice

# 通用性http请求模块
class model_of_request:
    def __init__(self):
        self.urls = ‘http://1212.ip138.com/ic.asp‘
        self.is_active_proxy_ip = []

    # 获取user-agent
    def get_user_agent(self):
        ua = UserAgent()
        headers = {‘User-Agent‘: ua.random}
        return headers

    # 将post请求转换字典
    def postdata_to_dict(self, response):
        data = {}
        if ‘&‘ in response:
            resp = [line.split(‘=‘) for line in response.split(‘&‘)]
            for i in resp:
                data.update({i[0]: i[1]})
        else:
            resp = response.split(‘=‘)
            data.update({resp[0]: resp[1]})
        return data

    # 获取代理ip
    def get_active_proxy(self, file_name):
        # 从文件中获取代理ip
        with open(file_name, ‘r‘) as f:
            proxy_urls = [‘http://‘ + line.strip() for line in f.readlines()]
        # 验证代理ip是否存活
        for url in proxy_urls:
            try:
                html = requests.get(self.urls, proxies=url)
                if html:
                    self.is_active_proxy_ip.append(url)
            except:
                pass

    def get_random_proxy(self):
        # 随机获取一个代理ip
        proxies = {
            ‘http‘: choice(self.is_active_proxy_ip)
        }
        return proxies

    def monkey_patch(self):
        ‘‘‘
        requests库中文乱码补丁
        ‘‘‘
        prop = requests.models.Response.content

        def content(self):
            _content = prop.fget(self)
            if self.encoding == ‘ISO-8859-1‘:
                encodings = requests.utils.get_encodings_from_content(_content)
                if encodings:
                    self.encoding = encodings[0]
                else:
                    self.encoding = self.apparent_encoding
                _content = _content.decode(self.encoding, ‘replace‘).encode(‘utf8‘, ‘replace‘)
                self._content = _content
            return _content

        requests.models.Response.content = property(content)

    # post请求模板
    def self_post(self, url_name, post_data):
        self.monkey_patch()
        for i in range(1, 3):
            try:
                response_data = requests.post(url_name, headers=self.get_user_agent(), data=post_data,
                                              proxies=self.get_random_proxy())
                if response_data.status_code >= 500:
                    pass
                else:
                    return response_data

            except:
                pass

    # get请求模板
    def self_get(self, url_name):
        self.monkey_patch()
        # print(self.get_user_agent())
        for i in range(1, 3):
            try:
                respose_data = requests.get(url_name, headers=headers, proxies=self.get_random_proxy())
                if html.status_code >= 500:
                    return False
                else:
                    return respose_data
            except:
                pass

if __name__ == ‘__main__‘:
    respon = model_of_request()
    print(respon.get_random_proxy())

  

时间: 2024-08-07 12:15:30

http请求模块的相关文章

iOS开发之Socket通信实战--Request请求模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要多个i

同步发送请求模块

同步加载有两种,一个是直接加载方式,另一个是发送标准同步请求后生成页面的方式. 直接方式的实现是requestWithURL:url,这种方案基本上已经很少有人用了. 发送标准同步请求的方式就是通过sendSynchronousRequest这个函数实现. 咱们的这个标准同步请求模块是通过代理来实现,就只贴代码,步贴使用方法了. chttpSendSynchronousRequest.h文件 #import <Foundation/Foundation.h> @interface chttpS

爬虫请求模块

模块名及导入 1.模块名:urllib.request 2.导入方式: 1.import urllib.request 2.from urllib import request 常用方法详解 (一)urllib.request.urlopen()方法 1.作用 向网站发起请求并获取响应对象 2.参数 1.URL:需要爬取的URL地址 2.timeout: 设置等待超时时间,指定时间内未得到响应抛出超时异常 3.第一个爬虫程序 打开浏览器,输入百度地址(http://www.baidu.com/)

django-rest framework 框架生命周期 请求模块 渲染模块 解析模块 异常模块 响应模块

一.DRF框架 1.安装 pip3 install djangorestframework 2.drf框架规矩的封装风格 按功能封装,drf下按不同功能不同文件,使用不同功能导入不同文件 from rest_framework.views import APIView #视图,以后都继承这个,这个也是继承views后一顿操作完善了功能 from rest_framework.response import Response #响应 from rest_framework.request impo

前后台交互ajax请求模块

下载依赖包axios npm i axios -d 最基本的axios异步请求 /* 能发送异步ajax请求的函数模块 封装 axios库 函数的返回值:是一个promise对象 (可以用.then()/ async await 进行异步处理) */ //引入axios库 import axios from 'axios'; //引入axios库的模块 export default function ajax(url, data={}, method='GET'){ if(method==='G

vue项目常用之二:封装 axios 请求模块

/** * 封装 axios 请求模块 */ import axios from 'axios' import jsonBig from 'json-bigint' import store from '@/store' import router from '@/router' import { Notify } from 'vant' // axios.create 方法:复制一个 axios const request = axios.create({ baseURL: 'http://t

python 的http请求模块 urllib3

urllib3 urllib3是一个强大的,理智的友好的HTTP客户端程序.大部分的Python的生态系统已经使用,你也应该urllib3.urllib3带来从Python标准库缺少许多关键特征: 线程安全. 连接池. 客户端SSL / TLS验证. 多重编码文件上传. 助手重试请求和处理HTTP重定向. 支持gzip和deflate编码. HTTP和袜子的代理支持. 100%测试覆盖率. >>> import urllib3 >>> http = urllib3.Po

node.js--静态文件请求模块

[实现一个静态资源管理模块] /** *static_module.js */ var BASE_DIR = __dirname, //绝对路径 CONF = BASE_DIR + '/conf/', //conf文件的路径 STATIC = BASE_DIR + '/static', //静态文件的路径 mmieConf; //用来存储mmie json //文件及其相关mmie类型保存在mmie_type.json里,读取这个json var getMmieConf = function()

nodejs使用request和bluebird编写的http请求模块

var request = require("request"); var promise = require("bluebird"); //使用bluebird将request库的所有异步方法编译成promise形式,会自动加上Async后缀 request = promise.promisifyAll(request); var curl = (function () { function curl() { } /** * 输入一个url和需要post的数据(如