Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сокет для http:80 не работает!


Автор: szz 2.8.2006, 17:04
Посмотрев статью index.php?act=ST&f=176&t=103996&st=
а также в конце почитав это
index.php?act=module&module=vingradfaq&article_num=003044
решил создать свою функцию для получения данных с другого сервера.

   Но она почему-то всегда выдает 404 file not found!

  Вот, http://printshock.com/url.php.

  А вот исходник этого скрипта (функция url_get_contents_get типа и есть та замена):
Код

<?
function necho($a){
    echo nl2br($a), '<br>';
}
function default_request_var($var, $def=''){    
    return empty($_REQUEST[$var])?$def:$_REQUEST[$var];}



$host = default_request_var('host', 'xkiosk.net');
$port = intval(default_request_var('port', '80'));
$path = default_request_var('path', '/index.php');
$getvars = default_request_var('getvars', '');
?>
<form action="url.php" method="GET">
<?function echoinput($n){?>
    <?=$n?>: <input name="<?=$n?>" value="<?=$GLOBALS[$n]?>">
<?}
echoinput('host');
echoinput('port');
echoinput('path');
echoinput('getvars');
?>
<input type="submit" value="ok">

</form>
got: <?=$host?>:<?=$port?><?=$path?>, get vars: <?=$getvars?><br>
<?
function url_get_contents_get($host, $path='/', $getvars='', $port=80){
    if($getvars)$getvars='?'.$getvars;
    $errno=0;
    $errstr='-';
    $putthis = '';
    
    necho( '<b>DOING:</b> '."fsockopen($host, $port, $errno, $errstr, 4)");
    $fp = fsockopen($host, $port, $errno, $errstr, 4);
    if(!$fp) return false;
    necho('CONNECTED!<br>');
    $putthis .= "GET $path$getvars HTTP/1.0\nUser-Agent: Mozilla\nReferer: xkiosk.net\nCookie: test=test_cookie\n\n";
    necho( "<b>SENDING THIS:</b>\n". ($putthis));
    fputs($fp, $putthis);    
    $ret = '';
    while(!feof($fp)) $ret .= fgets($fp); //Выводим ответ сервера
    
    fclose($fp); //Закрываем сокет
    return $ret;

}

$ret =  url_get_contents_get($host, $path, $getvars, $port);
?>we got: <pre><?=var_dump($ret)?></pre><br><?

?>

Автор: jsa 2.8.2006, 18:28
да впринципе, все правильно, все работает, если path сделать просто / , а не /index.php, причем это распространяется не только на xkiosk.net, может это просто особые настроки для DocumentRoot у апача

Добавлено @ 18:31 
может быть еще какого заголовка не хватает

Автор: szz 3.8.2006, 00:03
Судя по http://forum.vingrad.ru/index.php?act=ST&f=176&t=103996&st= - все верно вроде...
 Гм...

Автор: AztEK 3.8.2006, 09:47
Да, для других серверов и страниц это работает.
Думаю, нужны ещё заголовки.
Проще всего взять сниффер и посмотреть, какие заголовки посылает браузер, что сервер возвращает "200".

P.S. В статье есть отмазка  smile 
Цитата
Здесь приведён простейший пример, в реальных условиях, возможно, потребуются дополнительные проверки.

Автор: AztEK 3.8.2006, 13:32
Заинтересовался твоей проблемой. Кажется, нашёл решение. Самым первым заголовком отошли:
Код
Host: xkiosk.net


Вместо xkiosk.net ессесно название хоста.

Автор: szz 3.8.2006, 14:02
Вот спасибо! А я уже pearовские классы использовал...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)