2017-05-16 11 views
1

とfsockopenのではない動作します。のWhoisこの作品カール

$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); 

このカール機能と間違っていますか?

答えて

2

WHOIS service protocolは、1980年代半ばからのHTTPよりもずっと古いもので、ほとんど共通するものはありません。 curlは、任意のサービスではなく、HTTPタイプの接続でのみ使用できます。

1

私はこれが1歳だと知っていますが、受け入れられた答えが間違っています。 cURLは実際にはWhoisプロトコルをサポートする機能を持っていましたが、単純な要求よりも少し時間がかかります。

私はPHPへの正確な翻訳を知らないが、私は、これはちょうどそれはWhoisのは使用するものであるため、オプションはTELNETをサポートするように変更必要があると思います:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_TELNET); 

最後にあなたが戻って応答を得れば、あなたが必要があるかもしれませんあなたが実際のWhoIsデータを持っている直接のWhoisサーバに当たっていない限り、紹介を扱うことができます。この例のWhoisサーバーでは、google.seの応答としてmotアドレスを返す必要があります。

このサポートはこれまでずっと続いていましたが、私はこの質問が尋ねられる前にも信じています。


UPDATE:

申し訳ありませんが、本当に多くの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 /> 

あなたはそれがランダムな文字列のために働く必要がある場合は、あなただけで簡単に一時ファイルへの書き込みや関数に渡すために使用することができます。私は残念ながら、WHOISサーバへのデータのストリーミングに最適なオプションを判断するために、PHPのカールオプションを掘り下げる時間はありません。

ファイルquery.txtのファイル名はgoogle.seです。

+0

curl_setopt($ ch、CURLOPT_PROTOCOLS、CURLPROTO_TELNET); google.seのための縫い目はありません – cbm

+0

'TELNET'を動作させる方法に関する質問への更新をご覧ください。 – richardhsu

+0

私はあなたの広範な詳細についてあなたの答えを+1しましたが、私はまだポート43のTCPソケットとして利用できる非常に単純なので、基本的なHTTPライブラリを使ってwhoisサーバに接続するのは間違っていると思います。複雑なHTTPライブラリですべての工芸品を必要としません。また、whoisクエリを行うために調整されたPHPライブラリもあります。 –

関連する問題