You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

RiskIQ PassiveTotal API认证问题:带@用户名配置与405错误排查

解决RiskIQ PassiveTotal API认证的三个问题

嘿,我来帮你拆解这几个API认证里的常见坑:

1. 含@的邮箱如何拼接user:pass@格式的API地址

URL里的@是用来分隔用户认证信息和主机地址的特殊字符,你的邮箱本身带@,直接拼接会让服务端搞不清哪里是用户名、哪里是主机。解决办法很简单:把邮箱里的@做URL编码,替换成%40

举个实际例子,你的邮箱是myname@email.com,密钥是keystring,拼接后的合法地址应该是:

https://myname%40email.com:keystring@api.passivetotal.org/v2/dns/passive/unique/

这样服务端就能正确解析出你的完整用户名和密钥了。

2. HTTP请求头Authorization: Basic无效且返回405错误的原因及解决办法

先划重点:405错误是请求方法不允许,大概率是你用错了HTTP方法(比如用POST但API要求GET),而不是认证头本身的问题——不过我们还是先确认认证头的正确写法:

正确的Basic认证头格式

  1. 先把邮箱:密钥的原始字符串做base64编码,注意不要加换行符。你可以用命令行快速生成正确的编码:
    echo -n "myname@email.com.au:keystring" | base64
    
  2. 把生成的编码值放到请求头里,必须严格遵循这个格式:
    Authorization: Basic 你的base64编码值
    
    注意Basic后面有一个空格,绝对不能省略!

为什么会返回405?

因为curl -u默认使用GET请求,而你用requests的时候可能误写了POST方法。比如PassiveTotal的/v2/dns/passive/unique/端点是GET请求,所以你必须用requests.get()而不是requests.post()

给你一个正确的requests示例代码:

import requests
import base64

# 替换成你的邮箱和密钥
email = "myname@email.com.au"
api_key = "keystring"

# 生成Basic认证的base64字符串
auth_combined = f"{email}:{api_key}"
auth_base64 = base64.b64encode(auth_combined.encode('ascii')).decode('ascii')

headers = {
    "Authorization": f"Basic {auth_base64}"
}

# 注意用GET方法发送请求
response = requests.get(
    "https://api.passivetotal.org/v2/dns/passive/unique/",
    headers=headers
)

print(f"状态码: {response.status_code}")
print(f"响应内容: {response.json()}")

3. 如何查看curl发送的原始请求

只需要给curl加上-v(verbose)参数,就能看到完整的请求细节,包括请求方法、请求头、甚至TCP连接过程。比如:

curl -u myname@email.com.au:keystring -v https://api.passivetotal.org/v2/dns/passive/unique/

执行后,你会在输出里看到类似这样的请求内容:

> GET /v2/dns/passive/unique/ HTTP/1.1
> Host: api.passivetotal.org
> Authorization: Basic dXNmYXNkZmFzOmRhZmFkZmE=
> User-Agent: curl/7.68.0
> Accept: */*
>

这样就能对比你的requests请求头和curl的请求头是否一致,快速定位问题所在。

内容的提问来源于stack exchange,提问作者user504909

火山引擎 最新活动