Python: curl命令: 实现HTTP请求与数据交互的5种方法

代理IP 2025-08-01 代理知识 76 0
A⁺AA⁻
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内IP代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)

一、用系统命令直接调curl最省事

很多老铁刚开始玩爬虫时,可能不知道Python里可以直接调用系统命令。比如要快速测试代理IP是否能用,直接在代码里塞个curl命令最简单粗暴。举个栗子:

Python: curl命令: 实现HTTP请求与数据交互的5种方法

import os
proxy = "HTTP://user:pass@proxy.ipipgo.com:8080"
url = "https://httpbin.org/ip"
os.system(f'curl -x {proxy} {url}')

这里用到了ipipgo提供的住宅代理,注意他们的代理地址格式是用户名:密码@网关地址:端口。这种方式适合临时测试,但长期用的话建议看看下面更专业的方案。

二、requests库才是正经路子

正经做项目肯定要用requests库,但你可能不知道它底层也能用curl!通过配置适配器可以实现:

from requests import Session
from requests_curl import CURLAdapter

with Session() as s:
    s.mount('https://', CURLAdapter())
    resp = s.get(
        'https://API.ipipgo.net/ipinfo',
        proxies={'https': 'http://gateway.ipipgo.com:30001'}
    )
    print(resp.text)

用ipipgo的动态住宅IP时要注意,他们的网关地址需要走专用端口,不同协议对应不同端口,具体要看API文档说明。

三、玩转异步请求的黑科技

需要同时操作多个代理ip时,异步才是王道。这里有个骚操作——把curl命令塞进异步任务:

import asyncio

async def fetch(proxy):
    proc = await asyncio.create_subprocess_exec(
        'curl', '-x', proxy, 'https://httpbin.org/ip',
        stdout=asyncio.subprocess.PIPE
    )
    stdout, _ = await proc.communicate()
    return stdout

proxies = [
    'http://gateway.ipipgo.com:30001',
    'http://gateway.ipipgo.com:30002'
]

loop = asyncio.get_event_loop()
tasks = [fetch(p) for p in proxies]
results = loop.run_until_complete(asyncio.gather(tasks))

用ipipgo的多个网关地址实现IP轮换,特别适合需要模拟不同地区设备的场景。他们家的住宅IP覆盖240多个国家,想换哪个地区的IP都能找到。

四、底层socket直接操作

骨灰级玩家都喜欢直接玩socket,配合代理更刺激:

import socket
from urllib.parse import urlparse

def curl_via_proxy(url, proxy):
    proxy = urlparse(proxy)
    sock = socket.socket()
    sock.connect((proxy.hostname, proxy.port))
    sock.send(f"GET {url} HTTP/1.1\rHost: {urlparse(url).hostname}\r\r".encode())
    return sock.recv(4096)

response = curl_via_proxy(
    'https://ip.ipipgo.net/check',
    'http://gateway.ipipgo.com:30001'
)
print(response.decode())

这种方式能看透HTTP协议本质,但要注意ipipgo的代理网关全协议支持,不管是HTTP还是socks5都能hold住。

五、自动化神器pycurl

最后压轴的是pycurl库,这才是curl亲儿子:

import pycurl
from io import BytesIO

buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://httpbin.org/headers')
c.setopt(c.PROXY, 'gateway.ipipgo.com')
c.setopt(c.PROXYPORT, 30001)
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()

print(buffer.getvalue().decode())

用ipipgo的静态住宅IP时,记得在网关地址后面加/static路径,这样能保持长连接不换IP,适合需要固定身份的场景。

实战QA三连

Q:代理IP老是连接超时怎么办?
A:检查白名单设置,ipipgo的代理需要先绑定本机IP。如果是动态住宅IP,建议开启自动重试机制。

Q:怎么实现不同请求用不同地区的IP?
A:在代码里维护多个代理地址池,ipipgo的网关支持通过URL参数指定国家代码,比如?country=US来指定美国IP。

Q:HTTPS请求总是证书错误咋整?
A:在curl命令里加-k参数临时跳过验证,或者配置ipipgo提供的CA证书路径。他们家代理支持全协议加密传输,不用自己折腾SSL证书。

国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)

发表评论

发表评论:

扫一扫,添加您的专属销售

扫一扫,添加您的专属销售