Почему время ожидания моего запроса POST истекает в PHP с использованием cURL, но не в Postman?

#php #curl

#php #curl

Вопрос:

У меня есть auth.php файл, который должен отправлять запрос к API с некоторыми заголовками, данными и прочим.

Я попробовал Postman, и он почти сразу дал мне ответ.

Я скопировал код (PHP> cURL) и попробовал его, и это продолжалось waiting for MYPRIVATESITE.com в течение 30 секунд (я установил время ожидания на это), а затем просто cURL ERROR: TIMED OUT (или что-то в этом роде).

Что я сделал не так? Это работает, например, с postman, так почему не с моим сайтом?

 $curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://discordapp.com/api/v6/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "client_id=PRIVATEIDamp;client_secret=PRIVATEKEYamp;grant_type=authorization_codeamp;code=$codeamp;redirect_uri=https://kanebot.epizy.com/auth.phpamp;scope=identify guildsamp;undefined=",
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/x-www-form-urlencoded",
        "cache-control: no-cache"
    )
));

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

curl_close($curl);

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

Примечание: PRIVATEKEY и PRIVATEID есть, я просто удаляю их, потому что я не хочу, чтобы кто-то еще украл это. Это определено, и это сработало (прочитайте).
$code Также определено.

Ответ №1:

Вам не хватает amp; оператора в вашем POSTFIELDS между client_secret и grant_type

попробуйте добавить amp; и посмотрите, работает ли он после (это наверняка решит одну из ваших проблем)

 client_id=PRIVATEIDamp;client_secret=PRIVATEKEYgrant_type=authorization_codeamp;code=$codeamp;redirect_uri=https%3A%2F%2Fkanebot.epizy.com%2Fauth.phpamp;scope=identify%20guildsamp;undefined=
  

Комментарии:

1. Чтобы добавить к этому, я бы предложил использовать http_build_query , а не создавать его самостоятельно.

2. Как бы я поступил по этому поводу? Также это то, что postman выплевывает 😉

3. @ron О, спасибо за совет, но это была просто опечатка в моей статье : (

4. если он работает в postman, то у вас есть возможность просмотреть код в postman (кнопка «код» в разделе запроса справа), чем выбрать php —> curl, чем запускать его в вашей среде, возможно, это поможет вам определить, что неправильно