Нет ответа с Curl в среде PHP - PullRequest
0 голосов
/ 14 апреля 2019

У меня странная проблема с Curl в php.

Я делаю запрос POST на API с почтальоном.У меня есть ответ.Я сгенерировал код PHP с почтальоном (показать ниже).

Ответ почтальона

Но с php ответа нет.(это хорошо работает с другим запросом POST).

/ Applications / MAMP / htdocs / ******* / functions.php: 108: строка '' (длина = 0)

Есть идеи?

функция get_id ($ immat) {

$curl = curl_init();

curl_setopt_array($curl, array(
        CURLOPT_URL => "https://****.******.fr/*****.do",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 100,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "recherche=******&undefined=",
        CURLOPT_HTTPHEADER => array(
            "Accept: */*",
            "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
            "Origin: https://*********.fr",
            "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
            "X-Requested-With: XMLHttpRequest",
            "cache-control: no-cache"
        ),
    ));

$response = curl_exec($curl);
$err = curl_error($curl);

var_dump($response);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
    var_dump($response);
}

}

1 Ответ

0 голосов
/ 14 апреля 2019

я думаю, что вы неправильно кодируете CURLOPT_POSTFIELDS.Вы помните, чтобы кодировать каждый @ как %40?Вы помните, чтобы кодировать каждый пробел в %20?Вы помните, чтобы кодировать каждый & как %26?я думаю, что ответ - нет.используйте либо urlencode (), либо http_build_query () (в дополнение к тому, чтобы убедиться, что все закодировано правильно, код обычно тоже оказывается намного красивее, если правильно перенести на http_build_query ())

nitpicking:

не устанавливайте заголовок User-Agent вручную, вместо этого установите CURLOPT_USERAGENT (установка заголовка вручную не будет хорошо работать с CURLOPT_FOLLOWLOCATION, и легко забыть установить его для последующих запросов ... просто как правило)используйте вместо этого CURLOPT_USERAGENT.)

не используйте CURLOPT_CUSTOMREQUEST для запросов POST, установите CURLOPT_POST=>1 - CURLOPT_CUSTOMREQUEST опасен, поскольку он не очищается автоматически (в отличие от CURLOPT_POST) и должен быть вручную установлен в NULL после того, как вы закончитеиспользуя его, и когда программисты забывают очистить CURLOPT_CUSTOMREQUEST, часто возникают ошибки (например, последующие запросы, использующие неправильный тип запроса)

, если специально используются форматы application/x-www-form-urlencoded или multipart/form-data, не устанавливайте Content-Type заголовок вручную, пусть curl устанавливает автоматический заголовокlly, поэтому удалите этот "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" (во-первых, libcurl имеет автоматические тестовые наборы, работающие, чтобы убедиться, что в заголовке нет опечаток, в отличие от вашей собственной кодовой базы, и для последнего формата вы можете испортить граничный заголовок)

"Accept: */*" в любом случае является заголовком libcurl по умолчанию, так что вы можете удалить его, если хотите, это не имеет значения (и может привести и здесь аргумент опечаток)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...