有没有办法通过代理在GAE上的python中发送请求?我还需要在整个代码中更改代理,以便不同的请求使用不同的 ip。 我正在尝试在 GAE 实例上运行的 python 文件中发送请求。
这是代码的一部分
proxy_dict = {
'https': f'https://{proxy}'
}
r = requests.post(url, json=payload, headers=headers, cookies=cookies, verify=False, proxies=proxy_dict)
当我运行代码并打印出状态代码时,我得到 200,但是,当我打印出 response.text 时,我得到的是乱码?当不在 GAE 上运行时,代码可以正常工作。
我看到这个旧的错误报告标记为“无法修复”:https://issuetracker.google.com/issues/35876512
但是,那里的解决方法不允许将不同的代理用于不同的请求。
确保验证 GAE 环境限制:确保您的 GAE 环境允许外部 HTTP 请求并支持带有代理的请求库。如果您使用标准环境,与灵活环境相比,可能会有更严格的限制。
import requests
def get_new_proxy():
# Replace this with the actual method of fetching a new proxy from your proxy provider
proxy_list = ['proxy1:port', 'proxy2:port', 'proxy3:port'] # Example proxy list
return random.choice(proxy_list)
def send_request(url, payload, headers, cookies):
proxy = get_new_proxy()
proxy_dict = {
'https': f'https://{proxy}'
}
response = requests.post(url, json=payload, headers=headers, cookies=cookies, verify=False, proxies=proxy_dict)
return response
url = "https://example.com/api"
payload = {'key': 'value'}
headers = {'Authorization': 'Bearer your_token'}
cookies = {'session_id': 'your_session_id'}
response = send_request(url, payload, headers, cookies)
print(response.status_code)
print(response.text)
处理响应编码:确保正确处理响应编码。如果您收到乱码,则响应可能不是 UTF-8 编码的。如果需要,显式设置编码: Python 复制代码 response.encoding = 'utf-8' # 或适当的编码 打印(响应.文本) 调试和日志记录:添加大量日志记录以帮助调试与代理连接和响应处理相关的问题。
GAE 限制的解决方法:
自定义域套接字:GAE 灵活的环境允许自定义域套接字,可用于连接到代理。 外部服务:如果 GAE 的限制过于严格,请考虑将请求处理卸载到外部服务或提供更大灵活性的其他云提供商。 这是一个更详细、更完整的日志记录示例:
import requests
import random
import logging
logging.basicConfig(level=logging.INFO)
def get_new_proxy():
# Replace this with the actual method of fetching a new proxy from your proxy provider
proxy_list = ['proxy1:port', 'proxy2:port', 'proxy3:port'] # Example proxy list
selected_proxy = random.choice(proxy_list)
logging.info(f"Selected proxy: {selected_proxy}")
return selected_proxy
def send_request(url, payload, headers, cookies):
proxy = get_new_proxy()
proxy_dict = {
'https': f'https://{proxy}'
}
try:
response = requests.post(url, json=payload, headers=headers, cookies=cookies, verify=False, proxies=proxy_dict)
response.encoding = 'utf-8' # Ensure correct encoding
logging.info(f"Response Status Code: {response.status_code}")
logging.info(f"Response Text: {response.text[:200]}") # Log first 200 chars of response
return response
except requests.exceptions.RequestException as e:
logging.error(f"Request failed: {e}")
return None
url = "https://example.com/api"
payload = {'key': 'value'}
headers = {'Authorization': 'Bearer your_token'}
cookies = {'session_id': 'your_session_id'}
response = send_request(url, payload, headers, cookies)
if response:
print(response.status_code)
print(response.text)
此代码可能无法工作,因为某些网络代理完全不同。