Whois работает с fsockopen не с curl

Это работает:

$connection = fsockopen("whois.iis.se", 43);
fputs($connection, "google.se\r\n");
while (!feof($connection)) {
$data .= fgets($connection, 4096);
}
fclose($connection);
echo nl2br($data);

Но это не работает

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "whois.iis.se");
curl_setopt($ch, CURLOPT_PORT, 43);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "google.se\r\n");
$data = curl_exec($ch);
curl_close($ch);
echo nl2br($data);

Что не так с этой функцией curl?

1

Решение

Протокол службы WHOIS он намного старше HTTP, начиная с середины 1980-х годов, и имеет с ним мало общего. Вы можете использовать только curl на соединениях типа HTTP, а не на произвольных сервисах.

2

Другие решения

Я знаю, что это год, но: принятый ответ неверен. У cURL действительно была функциональность для поддержки протокола Whois, но это занимает немного больше, чем простой запрос.

Я не знаю точного перевода на PHP, но я думаю, что для поддержки TELNET нужно просто изменить параметры, поскольку именно это использует Whois:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_TELNET);

Наконец, как только вы получите ответ, вам, возможно, придется иметь дело с рефералами, если только вы не используете прямой сервер Whois, на котором есть реальные данные WhoIs. Для сервера Whois в этом примере он должен возвращать mot-адреса в качестве ответа для google.se,

Эта поддержка была в нем в течение долгого времени, я полагаю, еще до того, как этот вопрос был задан.


ОБНОВИТЬ:

Извините, я не очень много работал с PHP и PHP CURL, но заставил работать следующее. Это не идеально, но не был уверен, что лучший способ справиться со стандартными вещами.

$filename = "query.txt";
$fp = fopen($filename, "r");

function readFunc($ch, $fh, $length = false) {
return fread($fh, $length);
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "telnet://whois.iis.se:43");
curl_setopt($ch, CURLOPT_PORT, 43);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_NOPROGRESS, TRUE);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_TELNET);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename));
curl_setopt($ch, CURLOPT_READFUNCTION, 'readFunc');
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);  // Can take this out

$data = curl_exec($ch);
curl_close($ch);
echo nl2br($data);

Затем возвращается:

$ php query.php
* Rebuilt URL to: telnet://whois.iis.se:43/
*   Trying 91.226.37.83...
* TCP_NODELAY set
* Connected to whois.iis.se (91.226.37.83) port 43 (#0)
* Closing connection 0
# Copyright (c) 1997- IIS (The Internet Foundation In Sweden).<br />
# All rights reserved.<br />
# The information obtained through searches, or otherwise, is protected<br />
# by the Swedish Copyright Act (1960:729) and international conventions.<br />
# It is also subject to database protection according to the Swedish<br />
# Copyright Act.<br />
# Any use of this material to target advertising or<br />
# similar activities is forbidden and will be prosecuted.<br />
# If any of the information below is transferred to a third<br />
# party, it must be done in its entirety. This server must<br />
# not be used as a backend for a search engine.<br />
# Result of search for registered domain names under<br />
# the .se top level domain.<br />
# This whois printout is printed with UTF-8 encoding.<br />
#<br />
state:            active<br />
domain:           google.se<br />
holder:           mmr8008-53808<br />
admin-c:          -<br />
tech-c:           -<br />
billing-c:        -<br />
created:          2008-10-20<br />
modified:         2016-09-18<br />
expires:          2017-10-20<br />
transferred:      2009-03-06<br />
nserver:          ns1.google.com<br />
nserver:          ns2.google.com<br />
nserver:          ns3.google.com<br />
nserver:          ns4.google.com<br />
dnssec:           unsigned delegation<br />
status:           serverDeleteProhibited<br />
status:           serverTransferProhibited<br />
status:           serverUpdateProhibited<br />
registrar:        MarkMonitor Inc<br />

Если вам нужно, чтобы он работал со случайными строками, вы можете легко записать во временный файл и использовать его для передачи в функцию. К сожалению, у меня нет времени, чтобы продолжить копаться в опциях PHP curl, чтобы определить, какой из них лучше всего подойдет для потоковой передачи данных на сервер WHOIS.

Файл query.txt просто имеет google.se в этом.

1

По вопросам рекламы [email protected]