Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DunkMask

fsockopen

Recommended Posts

Olá, boa noite.

Estou tendo problemas para obter informações de um servidor de streaming.

 

Este é o link http://radiotensai.com.br/pico/teste/demo.php

aparece o seguinte erro: Warning: fsockopen() [function.fsockopen]: unable to connect to ouvir.radiotensai.com.br:8004 (Connection timed out) in /home/tensai/public_html/pico/teste/shoutcast.class.php on line 38

Connection timed out (110)

 

Entrei em contato com a empresa de hospedagem solicitando a liberação do ip e porta em questão no firewall, mas eles me alegaram que a porta já esta liberada.

 

Existe alguma outra forma de realizar a busca de informações de outro servidor sem o fsockopen?

 

ps.: estou usando a classe shoutcast.class.php para pegar os dados de que preciso do shoutcast.

 

Se alguém puder me ajudar com outra solução eu agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode informar um valor maior para o quinto parâmetro de fsockopen() e testar se essa lentidão é apenas na hora de conectar ao servidor.

 

Caso a demora na resposta ocorra também durante a leitura das informações, terá de usar stream_set_timeout(), informando no primeiro argumento o recurso aberto por fsockopen() e, no segundo, o tempo limite desejado.

 

No entanto, usar stream_set_timeout() não o isenta da necessidade de um valor aumentado no argumento de fsockopen() uma vez que essa função requer um recurso válido que só se completa depois que fsockopen() foi executado com sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, já tive esse problema com fsockopen, "RESOLVI" usando a biblioteca curl

olhe no php.info (vide no seu cpanel) se a função está habilitada no seu host.

 

Edit: escrevi pelo celular e ficou sem nexo meu texto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você teve problemas com fsockopen() e cURL ao mesmo tempo? Como assim? Posso estar enganado, mas ou usa um ou outro.

 

E quanto a verificar no PHP.INI, a diretiva em questão seria allow_url_fopen mas tenho uma boa certeza de que nesse caso esteja com On porque senão daria outra mensagem de erro.

 

Há ainda stream_socket_client() que é meio que um misto de fsockopen() com cURL.

 

Uma fsockopen() "tunada", digamos assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiquei na mão então, o stream_socket_client()não funciona e eu tenho certeza que a porta e o ip estão bloqueados no firewall, mas a empresa alega que não.

 

tudo pq eu quero armazenar uma unica informação no banco U.U

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu juro que estava a ponto de desistir quando resolvi checar se alguém intimamente ligado ao WinAMP teve o memso problema.

 

E não é que teve?

 

Utilizando a cURL consegui conectar e ler fácil, fácil:

 

$ch = curl_init( 'ouvir.radiotensai.com.br' );

curl_setopt( $ch, CURLOPT_PORT, 8004 );
curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla (DNAS 2 Statuscheck)' );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );

$data = curl_exec( $ch ) or die( curl_error() );

curl_close( $ch );

var_dump( $data );

Daí eu tentei reproduzir utilizando fopen() mas só conseguir utilizando uma Stream Context:

 

$context = stream_context_create(

   array(

       'http' => array(

           'user_agent' => 'Mozilla (DNAS 2 Statuscheck)',
       )
   )
);

$fp = fopen( 'http://ouvir.radiotensai.com.br:8004', 'r', FALSE, $context );

if( ! $fp ) {

   // Erro!

} else {

   do {

       echo fread( $fp, 4096 );

   } while( ! feof( $fp ) );
}

E sabe quem é o culpado por impedir o acesso? O User-agent :o

 

Aparentemente, fopen() e cia. não envia o User-agent automaticamente quando eu imagino que o certo seria enviar.

 

Enfim... Inicialmente eu achei que o sistema exigia aquele User-agent em particular, com aquele termo que designa o D.N.A.S, mas não :huh:

 

Posso muito bem enviar $_SERVER['HTTP_USER_AGENT'] que funciona.

 

Sem esse argumento, eu recebia como Response Status um ICY 200 OK.

 

Quanto ao seu problema de timeout em particular, no momento que testou o site devia estar fora do ar porque antes de eu ter o sucesso que eu tive, eu cheguei a acessar manualmente o URL da rádio e vi que o servidor, de fato, havia caído.

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.