2016-03-12 11 views
0

Можно ли преобразовать этот код cURL в Guzzle?PHP cURL to 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

IIRC '$ client-> post()' фактически выполняет запрос и возвращает ответ. Вероятно, у вас также должен быть идентификатор протокола, например 'http: //', на вашем 'base_uri', и вы уверены, что хотите порт 43, а не 443? Наконец, довольно странно видеть голую ошибку cURL при использовании Guzzle. Обычно сам Guzzle создает исключение, трассировка стека которого может быть весьма полезной. – Sammitch

+1

Guzzle добавит 'http', если он не предоставлен, и whois lookup всегда использует порт' 43' – Rifki

+0

После изучения [протокола WHOIS] (https://tools.ietf.org/html/rfc3912) у меня есть лучший вопрос : Почему вы пытаетесь использовать клиентские библиотеки HTTP для доступа к службам, отличным от HTTP? По крайней мере, Guzzle собирается отправлять заголовки HTTP (не говоря уже о заголовках, которые вы указываете вручную), что служба WHOIS не имеет надежды осмыслить. – Sammitch

ответ

0

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

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

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

Смежные вопросы