简体   繁体   English

无法使用请求模块在 python 中代理请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM