За последние 24 часа нас посетили 17957 программистов и 1650 роботов. Сейчас ищет 1181 программист ...

Curl - 400 Bad request

Тема в разделе "PHP для новичков", создана пользователем bigB, 23 июн 2016.

  1. bigB

    bigB Новичок

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0
    Вообщем-то со стороны сервера пытаюсь переводить текст с Яндекс апи. Столкнулся с проблемой, что в зависимости от текста всплывает 400 ошибка.
    Например при Mad has всё нормально, а при Mad Has ошибка, при Mad Qwe всё нормально.

    PHP:
    1. <?php
    2.  
    3. $curl = curl_init();
    4. $tr_text = $_GET["tr_text"];
    5. $tr_type = $_GET["tr_type"];
    6. $url = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20160622T182932Z.c2bfc0460fb9cc92.a72ddd223b90ec7d579cff18b9d3881ede982356&text=". $tr_text ."&lang=". $tr_type;
    7. echo $url;
    8. curl_setopt($curl, CURLOPT_URL, $url);
    9. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    10. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    11.  
    12. $res = curl_exec($curl);
    13. curl_close($curl);
    14. print_r($res);
    15. $res = json_decode($res);
    16. //echo $res->text[0] . "<br>";
    17. //echo $_GET['tr_text'];
    18. print_r($res);
    19. ?>
    20.  
    21. <form method="GET">
    22.     <input style="width: 300px" type="text" name="tr_text" value="<?echo $_GET['tr_text'];?>">
    23.     <input style="width: 50px" type="text" name="tr_type" value="<?echo $_GET['tr_type'];?>">
    24.     <input type="submit">
    25. </form>
     
  2. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    С конкретной задачей не сталкивался, но попробуй полученный переменные перевести в один регистр. И уже их отправлять яшке в нижнем регистре
    PHP:
    1. <?php
    2. $str = "У Мэри Был Маленький Ягненок и Она Его Очень ЛЮБИЛА";
    3. $str = mb_strtolower($str);
    4. echo $str; // Выведет у мэри был маленький ягненок и она его очень любила
    5. ?>
    --- Добавлено ---
    А ещё как бы у тебя в url идёт разрыв строки... Когда ты передаёшь предложение вот выведи свой url который ты получаешь в результате.
    Там у тебя в твоём предложение будут разрывы строк. Поэтому скорее всего и error 404. Потому что url c разрывной строкой идёт. Может там в апи написано что между каждым словом какие нибудь знаки должны стоять ?
     
  3. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    есть предложение, готовить адресную строку через urlencode()
     
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    А яша её раскодирует ?
    --- Добавлено ---
    Я просто не работал с апи яндекса
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  6. bigB

    bigB Новичок

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0
    Спасибо, помогло. Хотя я не понимаю почему, ведь я выводил через echo запрос, просто копировал его и вставлял и всё было нормально, рылся в заголовках, настройках курла очень долго, а всё оказалось так просто. :)
    --- Добавлено ---
    На всякий оставлю здесь полученный код
    PHP:
    1. <?php
    2. include("./engine/mysql.php");
    3.  
    4. $curl = curl_init();
    5. $data = array('key'=>'trnsl.1.1.20160622T182932Z.c2bfc0460fb9cc92.a72ddd223b90ec7d579cff18b9d3881ede982356',
    6.               'text'=>$_GET["tr_text"],
    7.               'lang'=>$_GET["tr_type"]);
    8.  
    9. $url = "https://translate.yandex.net/api/v1.5/tr.json/translate?". http_build_query($data) . "\n";
    10. echo $url;
    11. curl_setopt($curl, CURLOPT_URL, $url);
    12. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    13. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    14. curl_setopt($curl, CURLOPT_HEADER, TRUE);
    15.  
    16. $res = curl_exec($curl);
    17. print("<pre>");
    18. curl_close($curl);
    19. //$res = json_decode($res);
    20. //echo $res->text[0] . "<br>";
    21. //echo $_GET['tr_text'];
    22. print_r($res);
    23. print("</pre>");
    24. ?>
    25.  
    26. <form method="GET">
    27.     <input style="width: 300px" type="text" name="tr_text" value="<?echo $_GET['tr_text'];?>">
    28.     <input style="width: 50px" type="text" name="tr_type" value="<?echo $_GET['tr_type'];?>">
    29.     <input type="submit">
    30. </form>
     
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Потому что у тебя, там разрыв строки в url шёл в результате.
     
  8. bigB

    bigB Новичок

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0
    Почему тогда "M H" выводило ошибку, а "M A", например, нет?
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в адресную строку браузера? браузер перед запросом приводил адрес к корректному виду.
     
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Ну где то может проскакивало, не знаю, я не сталкивался ещё с такой задачей. Но ты попробуй создай url с пробелами и вбей в строку браузера, что в результате будет?
     
  11. bigB

    bigB Новичок

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0
    Проблема со стороны сервера была конкретно в определенных символах, M A нормально проходило в любом случае, M H выбивало ошибку.
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    askanim и denis01 нравится это.
  13. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    а что сейчас не может раскодировать такие строки?)
     
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Не знаю, я в эту область знаний не лез... И с Апи толком ещё не работал :(
     
  15. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @askanim, с АПИ работать радость. Если АПИ нормально документированный.
     
  16. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Я делал какую то задачу для собирания контента с wiki что-то посидел пока делал...