[英]Cannot proxy requests in python using requests module
I'm trying to build a basic proxy checker utility in python.我正在尝试在 python 中构建一个基本的代理检查器实用程序。 This is what I have right now:这就是我现在所拥有的:
import requests
from bs4 import BeautifulSoup
currentip=""
originalip=""
isProxied=False
proxies=["104.236.54.196:8080", "187.62.191.3:61456", "138.204.179.162:44088", "91.216.66.70:32306"]
proxy_count = len(proxies)
url = "https://www.ipchicken.com/"
r = requests.get(url)
def statement():
global currentip
global originalip
print("Current ip is: "+currentip)
print("Your true ip is: "+originalip)
def main(req):
global currentip
soup = BeautifulSoup(req.content, "html.parser")
html = soup.html
body = html.body
font = body.find_all('font')
ip_container = font[0].b
ip = ip_container.contents[0]
currentip=ip
main(r)
originalip=currentip
statement()
print("\n\n")
print("testing proxies...")
print("\n\n")
for x in range(proxy_count):
proxyContainer={"http":"http://"+proxies[x]}
r2 = requests.get(url, proxies=proxyContainer, timeout=20)
print("proxy: " + proxies[x])
main(r2)
statement()
print("\n\n")
if (currentip==originalip):
print("Proxy failed.")
else:
print("This proxy works")
print("\n")
The code runs fine and the requests are made, but they seem to not be proxied.代码运行良好并且发出了请求,但它们似乎没有被代理。 Here is my output:这是我的输出:
Current ip is:
199.229.249.163
Your true ip is:
199.229.249.163
testing proxies...
proxy: 104.236.54.196:8080
Current ip is:
199.229.249.163
Your true ip is:
199.229.249.163
Proxy failed.
proxy: 187.62.191.3:61456
Current ip is:
199.229.249.163
Your true ip is:
199.229.249.163
Proxy failed.
proxy: 138.204.179.162:44088
Current ip is:
199.229.249.163
Your true ip is:
199.229.249.163
Proxy failed.
proxy: 91.216.66.70:32306
Current ip is:
199.229.249.163
Your true ip is:
199.229.249.163
Proxy failed.
I have tested these proxies in a separate program and they seem to work fine, I don't think the proxies are the issue.我已经在一个单独的程序中测试了这些代理,它们似乎工作正常,我不认为代理是问题所在。
If you connect to encrypted url https
then you have to set proxy for https
connections but you set proxy only for http
so it doesn't use proxy.如果您连接到加密的 url https
那么您必须为https
连接设置代理,但您仅为http
设置代理,因此它不使用代理。
Problem is to find working proxy.问题是找到工作代理。
I took from https://hidemy.name/en/proxy-list/?type=s#list but I don't know how long it will work.我从https://hidemy.name/en/proxy-list/?type=s#list 获取,但我不知道它会工作多久。
And to test IP I used httpbin.org which returns data as JSON so it is easy to display or convert to Python's dictionary.为了测试 IP,我使用了 httpbin.org,它以 JSON 形式返回数据,因此很容易显示或转换为 Python 的字典。
import requests
url = "https://httpbin.org/ip"
proxies = {
#"http": '141.125.82.106:80',
"https": '141.125.82.106:80',
}
r = requests.get(url, proxies=proxies)
print(r.text)
ip = r.json()["origin"]
print('IP:', ip)
BTW: other problem can be that some proxy sends your IP in extra header and servers may get it - so not all proxies are anonymouse.顺便说一句:其他问题可能是某些代理在额外的标头中发送您的 IP,而服务器可能会得到它 - 所以并非所有代理都是匿名的。
EDIT: Version with https://www.ipchicken.com/编辑:带有https://www.ipchicken.com/ 的版本
import requests
from bs4 import BeautifulSoup
def get_ip(request):
soup = BeautifulSoup(request.content, "html.parser")
return soup.find('font').b.contents[0]
url = "https://www.ipchicken.com/"
proxies = {
#"http": '141.125.82.106:80',
"https": '141.125.82.106:80',
}
r = requests.get(url, proxies=proxies)
ip = get_ip(r)
print(ip)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.