基础用法

五号代理的使用非常简单,API地址加上必要的参数就可以开始使用。

API地址:

https://api.agentfive.cn/v1

必要参数:

key:用户的 API_KEY,可以在用户的控制台查看。

url:需要采集的目标网站地址。

一个简单的示例:

curl "https://api.agentfive.cn/v1?key=API_KEY&url=https://httpbin.org/anything"

返回结果

{
  "args": {},
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip",
    "Host": "httpbin.org",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
    "X-Amzn-Trace-Id": "Root=1-60bed4aa-04b6c68516d2a6a27298d2d1"
  },
  "json": null,
  "method": "GET",
  "origin": "175.24.61.124",
  "url": "https://httpbin.org/anything"
}

几点说明:

  1. 如果请求目标url出现错误,五号代理会重试请求目标的url地址,总的超时时间为60秒。所以在使用API的时候,建议设置请求超时时间为60秒。
  2. 请求成功,目标url的Header和状态码会透传过来,如果是五号代理自身的Header,都会以X-A5-为前缀标记出来。
  3. 每个请求body的大小限制为2M,如果超过此限制,服务会返回413错误码。
  4. 默认情况下,五号代理会自动处理redirect。如果不希望五号代理处理redirect,可以使用参数关闭。详情见参数说明。
  5. 如果你的并发数超过你的价格计划,服务会返回429错误码。
  6. 如果你的请求点数超过价格计划,服务会返回401错误码。
可用参数
参数名 参数类型 是否必填 默认值 说明
key string API授权秘钥,账户的API_KEY可以在控制台页面找到。
url string 请求目标完整地址,需要URL参数编码
follow_redirect boolean true 是否自动处理重定向。
profile string desktop User Agent设置,可选值:desktop, mobile
render boolean false 是否需要JS渲染,消耗5个请求点数
wait_ms integer JS渲染开启时有效,指定无头浏览器等待时间。单位ms。
wait_for string JS渲染开启时有效,指定等待的CSS选择器。如wait_for=.dynamic-price
返回状态码说明
代码 是否消耗点数 代码说明 解决办法
200 请求成功
400 请求参数错误 检查参数是否符合文档说明
401 请求点数不足 升级价格计划
404 目标网址不存在 检查目标网址url
413 请求body超过大小限制 默认是2M大小,如果有特殊需要请联系我们
429 并发数超额 升级价格计划
500 其他错误
X-A5-返回头说明
返回头名称 说明
X-A5-Url 请求的目标地址
X-A5-Cost 请求点数的消耗数量
X-A5-Redirection 请求过程是否发生redirect重定向
X-A5-Response-Url 实际返回数据的url地址
代码示例:python
from urllib import request, parse
import gzip

params = {
    'key': 'YOUR-API-KEY',
    'url': 'https://httpbin.org/anything',
    # other parameters
    # 'render': true
}

# parameter need to be encoded
query_str = parse.urlencode(params)

# send request and get response
url = "https://api.agentfive.cn/v1?%s" % query_str
r = request.urlopen(url)

# henale response
if r.headers.get('Content-Encoding') == 'gzip':
    body = gzip.decompress(r.read())
else:
    body = r.read()

print(r.status)
print(r.headers.items())
print(body.decode())
代码示例:golang
package main

import (
    "fmt"
    "io"
    "net/http"
    "os"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://api.agentfive.cn/v1", nil)
    if err != nil {
        fmt.Println(err)
    }

    query := req.URL.Query()
    query.Add("key", "YOUR-API-KEY")
    query.Add("url", "https://httpbin.org/anything")
    // other parameters
    // query.Add("render", "true")

    // parameter need to be encoded
    req.URL.RawQuery = query.Encode()

    // send request and get response
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
    }

    // henale response
    fmt.Println(resp.StatusCode)
    fmt.Println(resp.Header)
    io.Copy(os.Stdout, resp.Body)
}
代码示例:ruby
require 'net/http'
require 'uri'

params = {
    key: "YOUR-API-KEY",
    url: "https://httpbin.org/anything",
    # other parameters
    # 'render': true
}

uri = URI("https://api.agentfive.cn/v1")

# parameter need to be encoded
uri.query = URI.encode_www_form(params)

# send request and get response
res = Net::HTTP.get_response(uri)

# henale response
puts res.code
puts res.to_hash.inspect
puts res.body
代码示例:nodejs
const https = require('https');
const zlib = require('zlib');

let u = new URL("https://api.agentfive.cn/v1");

u.searchParams.append('url', 'https://httpbin.org/anything');
u.searchParams.append('key', 'YOUR-API-KEY');
// other parameters
// u.searchParams.append('render', true);

let options = {
    method: "GET"
}

const req = https.request(u, options, (res) => {
    const data = [];

    res.on('data', (chunk) => {
        data.push(Buffer.from(chunk));
    });

    res.on('end', () => {
        let body = Buffer.concat(data)
        if(res.headers['content-encoding'] === 'gzip') {
            body = zlib.gunzipSync(body);
        }
        console.log(res.statusCode);
        console.log(res.headers);
        console.log(body.toString());
    });
});

req.on('error', (e) => {
    console.log(e);
})

req.end();
Scrapy 中间件