搭建爬虫代理服务器:使用云服务器

news/2024/7/18 16:41:06 标签: 爬虫, 服务器, 运维
1.原理

代理服务器的作用是代替客户端向目标服务器发送请求,然后将目标服务器的响应返回给客户端。在网络中,代理服务器可以用来隐藏客户端的真实 IP 地址,或者用于访问某些受限制的内容,或者实现缓存、安全策略等功能。

在这个示例中,请求被发送到代理服务器,然后由代理服务器转发到指定的 URL。当服务器响应后,代理服务器将响应返回给客户端。因此,通过设置代理,客户端可以通过代理服务器与目标服务器进行通信。

我们的代理服务器使用的是flask与nginx来进行搭建。

2.技术

flask:搭建显示ip地址的网站

nginx:转发请求

request:使用代码的方式发起测试请求

3.关键部分代码

nginx

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://target_server_ip:target_server_port;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

flask

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    ip_address = request.headers.get('X-Forwarded-For', request.remote_addr)
    return f"Your IP address is: {ip_address}"

if __name__ == '__main__':
    app.run(port=****, debug=True)

request

import requests

url = '*****'

proxy = {
    'http': '*****',
}
response = requests.get(url, proxies=proxy)


if response.status_code == 200:
    print("Response from server:")
    print(response.text)
else:
    print("Failed to get response from server.")
4.代码解析

 4.1nginx

首先我们需要在我们的云服务器上安装nginx,安装教程有很多,如果有需要我们再单开一期

然后我们需要进行配置Nginx,

  • 进入Nginx配置文件夹,通常是 /etc/nginx/
  • 编辑 nginx.conf 或者 sites-available/default 文件,根据你的需求进行配置。  
  • your_domain.com 替换为你的域名或者服务器IP地址。
  • target_server_ip 替换为你要转发请求的目标服务器的IP地址。
  • target_server_port 替换为目标服务器的端口号。

 4.2flask

Flask 默认只会将请求认为来自于本地(localhost),因此即使你在云服务器上运行 Flask 应用,它也会认为请求来自于本地地址(127.0.0.1)。要获取真实的客户端 IP 地址,你需要处理由反向代理服务器(如Nginx)转发的请求头。在 Flask 中,这可以通过检查特定的请求头来实现。通常,经过反向代理服务器的请求会在 X-Forwarded-For 头部中包含客户端的真实 IP 地址。

通过这样的修改,Flask 将首先尝试从 X-Forwarded-For 请求头中获取客户端的真实 IP 地址,如果找不到则使用默认的 request.remote_addr,以便在本地开发时也能正常工作。当请求经过反向代理服务器时,X-Forwarded-For 请求头将包含一个或多个 IP 地址,以逗号分隔,第一个 IP 地址即为客户端的真实 IP 地址。

4.3request

这个是最简单的示例

在这个示例中,它发送了一个 GET 请求到指定的 URL,同时设置了代理服务器

 


http://www.niftyadmin.cn/n/5472809.html

相关文章

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中,存在编号从 1 到 n 的房屋,由 n 条街道相连。对所有 …

java中的抽象类和接口有什么异同?

在Java中,抽象类和接口都是用于实现多态性和封装性的重要概念,但它们在设计和用法上有一些区别。以下是关于Java中抽象类和接口的区别: 抽象类(Abstract Class) 定义: 抽象类是一个类,可以包含…

1.8 面试经典150题 O(1)时间插入删除和获取随机元素

O(1)时间插入删除和获取随机元素 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int va…

k8s svc流量转发

https://blog.csdn.net/qq_44930876/article/details/134813129 https://blog.csdn.net/weixin_43845924/article/details/136232099 默认使用iptables [rootlocalhost ~]# k logs kube-proxy-jcbcq I0405 10:37:28.610683 1 node.go:136] Successfully retrieved no…

彩虹聚合DNS管理系统v1.0全新发布

聚合DNS管理系统(https://github.com/netcccyun/dnsmgr)可以实现在一个网站内管理多个平台的域名解析,目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户,每个用户可分配不同的…

端盒日记Day02

JS 本本本本本地存储 localStorage 作用:可以将数据永久存储在本地(用户电脑),除非手动删除,否则关闭页面也会存在 特性:a.可多窗口(页面)共享(同一浏览器可以共享&a…

数据库之DDL操作(数据库,表,字段)

Data Definition Language,数据库定义语言,用来定义数据库对象(数据库,表,字段) 1.数据库操作 1.1查询所有数据库 show databases; 1.2查询当前数据库 show databases(); 1.3创建数据库 create da…

【Linux】探索环境变量与C语言命令行参数处理

文章目录 前言环境变量的基本概念环境变量的特性1. 全局属性2. 环境表的组织方式 命令行操作获取环境变量1. 使用char *env[]参数获取2. 使用environ变量获取 使用 C 语言处理命令行参数的两种方法方法一:处理带有数字选项的命令行参数方法二:处理带有操…