📅  最后修改于: 2023-12-03 15:19:11.932000             🧑  作者: Mango
在进行网络爬虫或其他涉及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回调中输出响应体即可。