Curl 没有头的人

Curl 没有头的人,curl,libcurl,whois,Curl,Libcurl,Whois,我在php中使用curl来发出whois请求。大多数情况下,这种方法都可以正常工作,但偶尔whois服务器会拒绝curl请求,因为它们使用的格式无效 这是一个工作示例: curl-X“who is.ga”who is.my.ga:43 另一方面,这不起作用: curl-X“宜家.欧盟”whois.eu:43 EU whois服务器拒绝该格式,因为(似乎)该格式包含请求中的所有标头,即: WHOIS ikea.eu/HTTP/1.1用户代理:curl/7.19.7 (x86_64-redhat-l

我在php中使用curl来发出whois请求。大多数情况下,这种方法都可以正常工作,但偶尔whois服务器会拒绝curl请求,因为它们使用的格式无效

这是一个工作示例:

curl-X“who is.ga”who is.my.ga:43

另一方面,这不起作用:

curl-X“宜家.欧盟”whois.eu:43

EU whois服务器拒绝该格式,因为(似乎)该格式包含请求中的所有标头,即:

WHOIS ikea.eu/HTTP/1.1用户代理:curl/7.19.7 (x86_64-redhat-linux-gnu)libcurl/7.19.7 NSS/3.21基本ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2主持人:whois.eu:43Accept:/

虽然大多数whois服务器会在\r\n之前解析请求,但有些服务器会考虑整个请求

所以我想删除额外的头,但只能删除用户代理和主机

curl-X“ikea.eu”--标题“主机”--标题“接受”--用户代理 欧盟:43

但标题“/”和“HTTP/1.1”仍然存在

%谁是宜家。eu/HTTP/1.1 -7%无效模式

关于如何使所有标题静音,有效地只发送“-X”的内容,或者如何单独删除不需要的标题,有什么建议吗


注意:我对whois请求使用curl,因为它允许我使用代理。我有意将这一部分排除在上述示例之外。

第一个服务器,
whois.eu
似乎可以工作,因为它遇到空白时会停止读取。另一个,
whois.eu
读取套接字中的所有输入,并将其用作查询

最好的办法可能是在telnet模式下使用cURL发送单个域并读取响应

这适用于我尝试的大多数WHOIS服务器:

echo ikea.eu | curl telnet://whois.eu:43
应该注意的是,cURL在telnet模式下一次向套接字写入一个字节,而不是一次写入所有数据。这可能会导致一些服务器出现问题,这些服务器不等待换行符终止输入(例如whois.tucows.com:43),而是在接收任何数据后执行查询

在这些情况下,您可以使用netcat:

echo yahoo.com | nc whois.tucows.com 43
它还支持代理:

echo yahoo.com | nc -X5 -x127.0.0.1:1080 whois.tucows.com 43

感谢您的提示,netcat似乎是一个不错的选择,它就像一个没有代理的魔咒,但是,当我添加一个外部代理时,我得到:nc:权限被拒绝。有没有办法解决这个问题?是袜子代理吗?您可能需要尝试
sudo
,具体取决于权限被拒绝错误的来源。如果有人好奇,此选项已被更改。cURL telnet模式现在一次发送多个字节,因此这些具有此类请求的服务器现在可以从7.54版开始工作。1@richardhsu感谢大家的提醒和对cURL的贡献。好多了@JackDegl'Innocenti与服务器的对话没有改变,但在GDPR之后,大多数注册者返回的信息将受到保护。请注意,
whois
是通过TCP传输的协议,而不是HTTP。因此,使用HTTP工具来查询它,比如
curl
,将会遇到困难。另见