📜  python 请求获取代理 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:19:11.932000             🧑  作者: Mango

Python Requests获取代理 - TypeScript

在进行网络爬虫或其他涉及HTTP请求的操作时,我们经常会需要使用代理来访问网站。Python的Requests库提供了方便的API来获取代理并使用。本文将介绍如何使用Python Requests获取代理,并且使用TypeScript编写代码。

安装依赖

在开始之前,我们需要安装Python Requests库。可以通过以下命令来进行安装:

pip install requests

对于TypeScript,我们需要安装@types/request来获得类型声明。可以通过以下命令来进行安装:

npm install --save-dev @types/request
获取代理

我们可以从很多不同的渠道获取代理,包括付费代理商、免费代理网站等等。在这里,我们将使用https://ip.jiangxianli.com/api/proxy_ips这个API来获取免费的高匿代理IP。以下是Python代码:

import requests

url = 'https://ip.jiangxianli.com/api/proxy_ips'
params = {
    'country': '中国',
    'anonymity': '高匿',
    'protocol': 'http',
    'order_by': 'speed',
    'sort': 'asc',
    'page': 1,
    'per_page': 10
}

response = requests.get(url, params=params)

proxy_list = []
if response.status_code == 200:
    proxy_data = response.json().get('data', [])
    for item in proxy_data:
        proxy_list.append('{}://{}:{}'.format(item.get('protocol'), item.get('ip'), item.get('port')))
else:
    print('Failed to get proxy, status code: {}'.format(response.status_code))

print(proxy_list)

上述代码首先定义了一个目标API的URL,并设置了一些GET参数,用于指定代理的一些属性,例如匿名度、协议等。然后使用Requests库的get方法来发送请求,获取代理列表。在获取到响应后,我们将返回的JSON数据中的代理信息,封装到一个列表中,并格式化为protocol://ip:port的形式。

以下是TypeScript代码:

import * as request from 'request-promise-native';

async function getProxyList() {
  const url = 'https://ip.jiangxianli.com/api/proxy_ips';
  const params = {
    country: '中国',
    anonymity: '高匿',
    protocol: 'http',
    order_by: 'speed',
    sort: 'asc',
    page: 1,
    per_page: 10
  };
  
  const response = await request.get({
    url: url,
    qs: params,
    json: true
  });
  
  const proxyList = [];
  if (response) {
    const proxyData = response['data'] || [];
    for (const item of proxyData) {
      proxyList.push(`${item.protocol}://${item.ip}:${item.port}`);
    }
  } else {
    console.log(`Failed to get proxy, status code: ${response.statusCode}`);
  }
  
  return proxyList;
}

getProxyList().then((proxyList) => {
  console.log(proxyList);
}).catch((error) => {
  console.log(error);
});

上述代码使用了request-promise-native库和async/await语法,来简化异步请求的使用。我们首先定义了一个getProxyList函数,该函数使用了目标API的URL和GET参数,来发送一个GET请求。在获取到响应后,我们使用相同的方式来解析响应体,获取代理并返回。

使用代理

获取到代理后,我们可以通过设置HTTP请求的proxies参数,来指定使用该代理。以下是Python代码:

import requests

url = 'https://www.baidu.com'
proxies = {
    'http': 'http://1.2.3.4:5678',  # 替换为获取到的代理
    'https': 'http://1.2.3.4:5678'
}

response = requests.get(url, proxies=proxies)

print(response.text)

上述代码使用了Requests库的get方法来发送一个HTTP请求。在请求中,我们使用字典形式的proxies参数,来指定使用代理。其中,键名为协议名称,键值为该协议下的代理地址。这里仅使用了HTTP协议,如果需要使用HTTPS协议,则需要设置对应的代理地址。

以下是TypeScript代码:

import * as request from 'request-promise-native';

const url = 'https://www.baidu.com';
const proxies = {
  http: 'http://1.2.3.4:5678',  // 替换为获取到的代理
  https: 'http://1.2.3.4:5678'
};

request.get({
  url: url,
  proxies: proxies,
  resolveWithFullResponse: true
}).then((response) => {
  console.log(response.body);
}).catch((error) => {
  console.log(error);
});

上述代码使用了Promise对象和ESM模块化语法。我们首先定义了一个目标URL和代理参数,然后使用request-promise-native库的get方法,来发送一个带有代理的GET请求。在获取到响应后,我们使用resolveWithFullResponse参数,来指定同时返回响应头、响应体等信息。在Promise回调中输出响应体即可。