五号代理的使用非常简单,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"
}
几点说明:
url
出现错误,五号代理会重试请求目标的url
地址,总的超时时间为60秒。所以在使用API的时候,建议设置请求超时时间为60秒。url
的Header和状态码会透传过来,如果是五号代理自身的Header,都会以X-A5-
为前缀标记出来。redirect
。如果不希望五号代理处理redirect
,可以使用参数关闭。详情见参数说明。参数名 | 参数类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
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地址 |
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())
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)
}
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
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();