PHP cURL в жрет

Можно ли конвертировать этот код cURL в Guzzle?

$ch = curl_init('whois.nic.co');

curl_setopt($ch, CURLOPT_PORT, 43);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "example.co\r\n");

$response = curl_exec($ch);

curl_close($ch);

Пробовал с этим кодом, но, похоже, не работает.

$client   = new Client(['base_uri' => 'whois.nic.co:43']);
$request  = $client->post('', array('Content-Type' => 'text/plain; charset=UTF8'), "example.co\r\n");
$response = $request->send();

Код выше возвращает ошибку: cURL error 0: The cURL request was retried 3 times and did not succeed. The most likely reason for the failure is that cURL was unable to rewind the body of the request and subsequent retries resulted in the same error. Turn on the debug option to see what went wrong. See https://bugs.php.net/bug.php?id=47204 for more information. (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

0

Решение

Как написано @Sammitch, whois пробегает TCP и не HTTP (хотя вы можете найти в Интернете услуги, которые предоставят вам whois сервис через веб-сайт или HTTP API, это не оригинальный протокол whois).

На порту 43 клиент, как правило, должен выдавать однострочный запрос, а сервер отвечает неструктурированным двоичным текстом. Это все, что определяет протокол. Поэтому нет заголовков, как в HTTP / 1.0 и более поздних версиях.

Поэтому не пытайтесь использовать HTTP-клиент для выполнения запросов. Иногда он может работать с большими искажениями, вы можете найти другой пример для curl: https://stackoverflow.com/a/45286777/6368697
но в конце концов нет никакого смысла делать это вместо простого соединения через telnet или использования библиотеки на вашем языке, специализирующейся на whois (в основном, если вам нужен «расширенный» анализ результатов).

0

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

Других решений пока нет …

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