Post запрос

Discussion in 'PHP' started by vvs777, 30 Oct 2005.

  1. vvs777

    vvs777 Elder - Старейшина

    Joined:
    16 Nov 2004
    Messages:
    394
    Likes Received:
    213
    Reputations:
    4
    Народ, нужна помощь!
    У меня на сайте стоит форма регистрации на другом сайте. Писал на Яваскрипте.
    Code:
    <form name="regfrm" method='POST' action="http://othersite.ru/cgi-bin/script.cgi">
    <input type="text" name="code" size=10>
    <input type="text" name="number" value=""> 
    <input type="text" name="language" value="rus">
    <textarea name="descr">Your description</textarea>
    <input type="submit" Value="Go!">
    </form>
    <script>
    // функция получает из строки запроса значение параметра по имени.
    function Getparamvalue(search_string, param_name) {
    param_name=param_name+'=';
    var z='';
    if (search_string!='') {
    if (search_string.indexOf(param_name,0)!=-1) {
    var startpos=search_string.indexOf(param_name,0)+param_name.length;
    var endpos=search_string.indexOf('%26',startpos);
    if (endpos<=startpos) endpos=search_string.length;
    z=search_string.substring(startpos,endpos);
    }
    }
    return z;
    }
    var p=window.location.search;
    document.regfrm.code.value=Getparamvalue(p,'code').substring(0,6);
    document.regfrm.number.value=Getparamvalue(p,'number');
    //...
    document.forms[0].submit();
    </script>
    
    Так вот.
    Как мне сделать то же самое на PHP?
    Если точнее, нет ли у кого готового кода формирования POST-запроса к скрипту с другого сайта с заданными значениями?
    Если б это был GET, можно было бы прописать что-то типа
    header('http://othersite.ru/cgi-bin/script.cgi?code=ABCD&number=bf01&language=rus&descr=Your_description');
    а так в descr многострочный текст, который должен быть передан именно так, как в textarea, без изменений.
     
  2. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Code:
     function Post($server,$url,$post)
        {
            $q="POST $url HTTP/1.1\r\n".
            "Host: $server\r\n".
            "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n".
            'Accept:text/html, image/jpeg, image/png, text/*, image/*, */*'."\r\n".
            "Accept-Encoding: x-gzip, x-deflate, gzip\r\n".
            "Accept-Charset: windows-1251, utf-8;q=0.5, *; q=0.5\r\n".
            "Accept-Language:ru, en\r\n".
            "Keep-Alive: 300\r\n".
            "Proxy-Connection: keep-alive\r\n".
            "Referer: $server \r\n".
            //
            "Content-Type: application/x-www-form-urlencoded\r\n".
            "Content-Length: ".strlen($post)."\r\n".
            "\r\n".
            "$post\r\n";
            $s=fsockopen($server,80);
            fputs($s,$q);
            while (!feof($s)) $page.=fgets($s);
            fclose($s);
            return $page;
    }
    
    Передаёшь функции 3 параметра: сервер, урла, ПОСТ запрос.

    Например
    Post('othersite.ru,'/cgi-bin/script.cgi','login=123&pass=qwerty');
     
    #2 fucker"ok, 2 Nov 2005
    Last edited: 2 Nov 2005
    1 person likes this.
  3. vvs777

    vvs777 Elder - Старейшина

    Joined:
    16 Nov 2004
    Messages:
    394
    Likes Received:
    213
    Reputations:
    4
    А если descr многострочный - надо писать
    Post('othersite.ru,'/cgi-bin/script.cgi','login=123&pass=qwerty&descr=stroka1%13%10stroka2%13%10итд'); ?
     
  4. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Можно и так, или обработать через urlencode();
     
  5. vvs777

    vvs777 Elder - Старейшина

    Joined:
    16 Nov 2004
    Messages:
    394
    Likes Received:
    213
    Reputations:
    4
    А самое главное не заметил. А без fsockopen как-то можно?
     
  6. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Curl, но не факт...