Php curl 400 error

Вообщем-то со стороны сервера пытаюсь переводить текст с Яндекс апи. Столкнулся с проблемой, что в зависимости от текста всплывает 400 ошибка. Например...

За последние 24 часа нас посетили 8767 программистов и 536 роботов. Сейчас ищут 334 программиста …


  1. bigB

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0

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

    1. $tr_text = $_GET[«tr_text»];
    2. $tr_type = $_GET[«tr_type»];
    3. $url = «https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20160622T182932Z.c2bfc0460fb9cc92.a72ddd223b90ec7d579cff18b9d3881ede982356&text=». $tr_text .«&lang=». $tr_type;
    4. //echo $res->text[0] . «<br>»;
    5.     <input style=»width: 300px» type=»text» name=»tr_text» value=»<?echo $_GET[‘tr_text’];?>«>
    6.     <input style=»width: 50px» type=»text» name=»tr_type» value=»<?echo $_GET[‘tr_type’];?>«>


  2. askanim

    С нами с:
    7 апр 2016
    Сообщения:
    2.200
    Симпатии:
    166
    Адрес:
    GABRIEL

    С конкретной задачей не сталкивался, но попробуй полученный переменные перевести в один регистр. И уже их отправлять яшке в нижнем регистре

    1. $str = «У Мэри Был Маленький Ягненок и Она Его Очень ЛЮБИЛА»;
    2. echo $str; // Выведет у мэри был маленький ягненок и она его очень любила

    — Добавлено —
    А ещё как бы у тебя в url идёт разрыв строки… Когда ты передаёшь предложение вот выведи свой url который ты получаешь в результате.
    Там у тебя в твоём предложение будут разрывы строк. Поэтому скорее всего и error 404. Потому что url c разрывной строкой идёт. Может там в апи написано что между каждым словом какие нибудь знаки должны стоять ?


  3. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206

    есть предложение, готовить адресную строку через urlencode()


  4. askanim

    С нами с:
    7 апр 2016
    Сообщения:
    2.200
    Симпатии:
    166
    Адрес:
    GABRIEL

    А яша её раскодирует ?
    — Добавлено —
    Я просто не работал с апи яндекса


  5. askanim

    С нами с:
    7 апр 2016
    Сообщения:
    2.200
    Симпатии:
    166
    Адрес:
    GABRIEL

    Потому что у тебя, там разрыв строки в url шёл в результате.


  6. bigB

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0

    Почему тогда «M H» выводило ошибку, а «M A», например, нет?


  7. Ganzal

    Команда форума
    Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    968

    в адресную строку браузера? браузер перед запросом приводил адрес к корректному виду.


  8. askanim

    С нами с:
    7 апр 2016
    Сообщения:
    2.200
    Симпатии:
    166
    Адрес:
    GABRIEL

    Ну где то может проскакивало, не знаю, я не сталкивался ещё с такой задачей. Но ты попробуй создай url с пробелами и вбей в строку браузера, что в результате будет?


  9. bigB

    С нами с:
    6 май 2016
    Сообщения:
    11
    Симпатии:
    0

    Проблема со стороны сервера была конкретно в определенных символах, M A нормально проходило в любом случае, M H выбивало ошибку.


  10. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206

    а что сейчас не может раскодировать такие строки?)


  11. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206

    @askanim, с АПИ работать радость. Если АПИ нормально документированный.


  12. askanim

    С нами с:
    7 апр 2016
    Сообщения:
    2.200
    Симпатии:
    166
    Адрес:
    GABRIEL

    Я делал какую то задачу для собирания контента с wiki что-то посидел пока делал…

Я пытаюсь отправить запрос (Post Request) на URL, но он возвращается

HTTP/1.1 400 Bad Request
content-disposition: attachment; filename=json.json
content-length: 118
content-type: application/json;charset=utf-8
date: Sat, 02 Sep 2017 11:33:56 GMT
server: tsa_o
strict-transport-security: max-age=631138519
vary: Origin
x-connection-hash: 32931e6376249fb1689df3203e847a2b
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-response-time: 108
x-transaction: 0021b7c8005c6a4e
x-tsa-request-body-time: 1
x-xss-protection: 1; mode=block

{ «CapsError»: «insufficientpermission», «RequestID»: «4f0c87b1349996812fafe51ca6a8197b5bb1e9d560d7dcb8a450ab
3c890e40ac «}

мой код

$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $URL,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => 'postField',
CURLOPT_COOKIEJAR =>  realpath("cookies/" . $name . ".txt"),
CURLOPT_COOKIEFILE => realpath("cookies/" . $name . ".txt"),
CURLOPT_CONNECTTIMEOUT=>30,
CURLOPT_HEADER         => true,      // return headers
CURLOPT_SSL_VERIFYPEER=>true,
));
$output = curl_exec($ch);
curl_close( $ch );
return $output;

Iam Sure From All Post Field, но тот же ответ Вернуться
Но в браузере все хорошо

1

Решение

Прежде всего вы можете изменить $output = curl_exec($ch); в echo $output = curl_exec($ch); Таким образом, вы увидите сообщения об ошибках в вашем браузере.

Также попробуйте urlencode ($ url); в случае, если в вашем URL есть пробелы.

Но ваша проблема, скорее всего, заключается в безопасности целевого сервера. Многие серверы рассматривают cURL как мошеннические атаки на сайты. Вот почему любой сценарий cURL должен содержать токен csrf целевой страницы в качестве параметров публикации.

Сначала вы должны найти токен на целевой странице, а затем написать код, чтобы ваш скрипт анализировал токен из выходной строки curl_exec.

0

Другие решения

Вы всегда можете переписать свой код.

что-то вроде этого :

 $http_headers = array(
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',);

$crl = curl_init();
$url = "http://www.example.gr/node/add/content";
curl_setopt($crl, CURLOPT_URL, $url);
curl_setopt($crl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt");
curl_setopt ($crl, CURLOPT_COOKIEJAR, "/tmp/cookie.txt");
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($crl, CURLOPT_HEADER, true);
curl_setopt($crl, CURLOPT_HTTPHEADER, $http_headers);
curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($crl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($crl, CURLOPT_USERAGENT,  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36");
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata);

echo $result=curl_exec($crl);
curl_setopt($crl, CURLOPT_POST, 1);
$postdata = array(
"title_field[und][0][value]"=>"category",
"op"=>"Save",     );
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata);
echo $result=curl_exec($crl);

Многие вещи могли пойти не так с вашей версией. Если это не сработает, перепроверьте, что я написал в своем первом ответе.

0

It seems like im getting a problem when Im trying to send a request to a server in php. The http api request is something like this:

http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14&apiKey=p9ycn9cxb2zp3k3gfvbf5aym&cid=55505&locale=en_US&hotelId=122212&stateProvinceCode=%20NV%C2%A4cyCode=USD&arrivalDate=12/27/2012&departureDate=12/28/2012&room1=2,&room2=2,18,15&room3=3,16,16,15&room4=3,&includeDetails=true&includeRoomImages=true

I have the following part of my code in php where I believe the error is occuring:

$url = 'http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14';
$url .= '&apiKey=p9ycn9cxb2zp3k3gfvbf5aym';
$url .= '&cid=55505';
$url .= '&locale=' . $locale . '&hotelId=' . $hotelid . '&stateProvinceCode=' . $state . '&currencyCode=USD';

$url .= '&arrivalDate=' . $datefr . '&departureDate=' . $dateto . '&' . $details . '&includeDetails=true&includeRoomImages=true';
$header = "Accept: application/json";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$retValue = curl_exec($ch);
$response = json_decode(curl_exec($ch));
$ee       = curl_getinfo($ch);
print_r($ee);

print_r($retValue);

This is what I get from the print_r(curl_getinfo($ch)) statement:

Array (
    [url] => http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14&apiKey=p9ycn9cxb2zp3k3gfvbf5aym&cid=55505&locale=en_US&hotelId=122212&stateProvinceCode= NV¤cyCode=USD&arrivalDate=12/27/2012&departureDate=12/28/2012&room1=2,&room2=2,18,15&room3=3,16,16,15&room4=3,&includeDetails=true&includeRoomImages=true
    [content_type] => text/html
    [http_code] => 400
    [header_size] => 181
    [request_size] => 340
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.469
    [namelookup_time] => 0
    [connect_time] => 0.125
    [pretransfer_time] => 0.125
    [size_upload] => 0
    [size_download] => 349
    [speed_download] => 744
    [speed_upload] => 0
    [download_content_length] => 349
    [upload_content_length] => 0
    [starttransfer_time] => 0.469
    [redirect_time] => 0
    [certinfo] => Array ( )
    [redirect_url] =>
)

I’m not sure what the solution can be and I have been looking at this problem for awhile now hopefully someone can help me thanks :)

Понравилась статья? Поделить с друзьями:
  • Phpstorm error log
  • Phase1 negotiation failed due to send error 500
  • Phpstorm commit failed with error
  • Phase1 initialization failed windows 10 как исправить
  • Phpstorm 502 bad gateway как исправить