За последние 24 часа нас посетили 15225 программистов и 1684 робота. Сейчас ищут 923 программиста ...

Не могу cURL'лить ответ скрипта

Тема в разделе "Прочие вопросы по PHP", создана пользователем Diver, 25 янв 2007.

  1. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    PHP:
    1. $mess = "phone=" . $_POST['phone'] . "&message=" . $_POST['message'] . "&message_length=0&hash=" . $_POST['hash'] . "&code=" . $_POST['code'];
    2. $user_agent = "Mozilla/4.0 (compatible MSIE 5.01; Windows NT 5.0)";
    3. $refer = "http://www.megafondv.ru/prim/sms/";
    4. $site = "http://www.megafondv.ru/prim/sms/post/";
    5. $ch = curl_init();
    6. curl_setopt($ch, CURLOPT_URL, $site);
    7. curl_setopt($ch, CURLOPT_REFERER, $refer);
    8. curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    9. curl_setopt($ch, CURLOPT_POST, 1);
    10. curl_setopt($ch, CURLOPT_POSTFIELDS, $mess);
    11. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);  
    12. curl_exec($ch);  
    В ответ просто пустая страница. Если делать путем
    PHP:
    1.  
    2. $info = curl_exec($ch);  
    3. echo $info
    то всегда выводится еденичка (1)
    А хотелось бы что-нибуть более интересное. как?
     
  2. CoolShake

    CoolShake Активный пользователь

    С нами с:
    23 июл 2006
    Сообщения:
    44
    Симпатии:
    0
    PHP:
    1. <?
    2. $mess = "phone=" . $_POST['phone'] . "&message=" . $_POST['message'] . "&message_length=0&hash=" . $_POST['hash'] . "&code=" . $_POST['code'];
    3. $user_agent = "Mozilla/4.0 (compatible MSIE 5.01; Windows NT 5.0)";
    4. $refer = "http://www.megafondv.ru/prim/sms/";
    5. $site = "http://www.megafondv.ru/prim/sms/post/";
    6. $ch = curl_init();
    7. curl_setopt($ch, CURLOPT_URL, $site);  
    8. curl_setopt($ch, CURLOPT_REFERER, $refer);
    9. curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    10. curl_setopt($ch, CURLOPT_POST, 1);
    11. curl_setopt($ch, CURLOPT_POSTFIELDS, $mess);
    12. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);  
    13. $html = curl_exec($ch);   // Результат в переменную
    14. ?>
    Тогда HTML-код будет в переменной $html.

    PHP:
    1. <?
    2.  
    3. $info = curl_exec($ch);  
    4. curl_close($ch);
    5. echo $info
    6. ?>
    7.  
    Не совсем понял верхний кусок кода, если он не полный привидите полный, иначе нужно ставить CURLOPT_RETURNTRANSFER.
     
  3. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    а иначе весь хтмл будет вываливаться в броузер.
    в бровзер вываливалась пустота, а в переменную еденичка.
    А проблема была в том, что надо было поставить опцию curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     
  4. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    Еще вопрос.
    обращаюсь к iis серверу (*.aspx). Там кодировка юникод утф8.
    Получаю инфу. В заголовках утф, в чарсете хтмла тоже утф.
    А броузер отображает каракули. При этом так же не передается русские буквы. Можно поменять в броузере тут же кодировку на утф и тогда все ок.
     
  5. Anonymous

    Anonymous Guest

    Diver, проблема в нескольких разных браузерах идентична?
     
  6. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Встречные вопросы, ибо непонятно...
    1. Инфа, которую ты получаешь, в какой кодировке приходит? UTF или что-то другое?
    2. У твоей страницы (твоего скрипта) какая кодировка? Win1251?

    Если кодировки совпадают, проблемы быть не должно... а если нет - нужно перекодировать. Для этого можно воспользоваться функцией iconv().
     
  7. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    да и в опере и в ие одно и тоже.

    кодировка в которой скрипт получает = утф, а в которой он это показывает мне = какая то кирилица. выходит надо кирилицу изменить на утф. щас попробую
     
  8. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    перекодировал все: echo iconv("UTF-8", "WINDOWS-1251" ,trim($result));
    впринципе все по русски, но не передаются русские буквы.
    Т.е. я удаленному скрипту отправляю русскую букву в одном поле, и не заполняю другое обязательное поле (код подтверждения).
    Тот удаленный скрипт, вылавливает ошибку (код подтверждения не совпадает), возвращает мне форму. но руские буквы не доходят (англ. буквы нормально доходят)

    все исправил. перед отправкой данных скрипту, кодирую все в утф, потом получаю и кодирую обратно в вин1251.

    Блин. ну надеюсь последний вопрос. Теперь проблема с куками и чеккодом.
    Допущение: чтобы тот скрипт смог проверить, правильно ли я ввел чеккод, он от меня еще запрашивает куку с каким то значение.

    PHP:
    1.  
    2.  
    3. if (!$_POST)
    4. {
    5.          //получаю заголовок с кукой, составляю свою форму, показываю картинку с кодом.
    6.     $ch = curl_init();
    7.     curl_setopt($ch, CURLOPT_URL, "site.ru");
    8.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    9.     curl_setopt($ch, CURLOPT_HEADER, 1);
    10.     curl_setopt($ch, CURLOPT_NOBODY, 1); // мне важен только заголовок с кукой
    11.     $result = curl_exec ($ch);
    12.     curl_close ($ch);
    13.     $start = "Set-Cookie: ";
    14.     $end = "Connection:";
    15.     $st = strpos($result, $start);
    16.     $cookie = substr($result, $st);
    17.     $en = strpos($cookie, $end);
    18.     $cookie = substr($cookie, 12, $en - 32); // получаю примерно такое значение: ASP.NET_SessionId=ml13or2yy21e2kvworygizis
    19. // а в действительности вся строчка: Set-Cookie: ASP.NET_SessionId=ml13or2yy21e2kvworygizis; path=/;
    20.     $cookie = iconv("UTF-8", "WINDOWS-1251", $cookie); // незнаю для чего
    21.     $final = "<form method=\"post\"></br>
    22.             тут всякая ботва с полями
    23.             <img src=site.ru/pic.aspx\" ></br>
    24.             <input type=\"hidden\" name=\"cookie\" value=\"" . $cookie . "\">
    25.             <input type=\"submit\" value=\"Заслать\">
    26.             </form>";
    27.     echo $final;
    28. }
    29. else
    30. {
    31.          // получили верхнюю форму
    32.     $cookie = $_POST['cookie'];
    33.     $cookie = iconv("WINDOWS-1251", "UTF-8", $cookie); // тоже незнаю для чего
    34.     $mess = делаем мессадж из пришедших пост полей.;
    35.     $site = "site.ru/form.aspx";
    36.     $mess = iconv("WINDOWS-1251", "UTF-8", $mess); //чтобы прошли русские буквы
    37.        
    38.     $ch = curl_init();
    39.     curl_setopt($ch, CURLOPT_URL, $site);
    40.     curl_setopt($ch, CURLOPT_COOKIE, $cookie); // посылаем куку к картинке, что бы сервер мог ее проверить
    41.     curl_setopt($ch, CURLOPT_POST, 1);
    42.     curl_setopt($ch, CURLOPT_POSTFIELDS, $mess);
    43.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    44.     $result = curl_exec($ch);  
    45.     curl_close($ch);
    46.     echo iconv("UTF-8", "WINDOWS-1251" ,trim($result)); // смотрим в нормальной кодровке что там ответил тот скрипт
    47. ?>
    48.  
    в итоге ответ, что картинка не сходится.
    Т.е. проблема (имхо) или я банально неправильно набираю картинку (что врят-ли), или где то что то напутал с куками...