Я пытаюсь преобразовать следующее PHP curl_setopt () к эквиваленту в пределах питон Запросы а также для CLI curl. Для Python, если это невозможно в Запросы, Я прибегну к помощи pycurl.
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
Вот рабочая PHP завиток код:
$params = array(
'username' => $username,
'password' => $password
);
$params_string = json_encode($params);
$process = curl_init($url);
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($process, CURLOPT_POSTFIELDS, $params_string);
$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec ($process);
curl_close ($process);
Я в недоумении, что мне нужно установить в Python Requests для тех двоих PHP curl_setopt (s).
И я попробовал следующее в CLI curl, но я получил Неверный запрос ошибка:
AUTHENTICATE_DATA="usename=${USERNAME}&password=${PASSWORD}"
AUTHENTICATE_RESPONSE=$(curl \
-X POST \
-H 'Content-Type: application/json' \
--data-urlencode "${AUTHENTICATE_DATA}" \
-v \
${AUTHENTICATE_URL})
echo ${AUTHENTICATE_RESPONSE}
Что мне нужно?
Спасибо, благодарю за помощь.
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
Эта опция просто говорит о том, что результат curl_exec()
передается в возвращаемую переменную. В командной строке по умолчанию выводится стандартный вывод.
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
Это очень плохая идея, и она сделает вас уязвимыми для атак «человек посередине». Там нет оправдания, чтобы использовать его. --insecure
эквивалентный параметр командной строки
Также стоит отметить, что вы передаете строку JSON в качестве параметра для CURLOPT_POSTFIELDS
и нет кодировки JSON, которая происходит с имеющимся у вас кодом CLI.
Используя запросы:
import requests
url = 'https://...'
username = 'username'
password = 'supersecret'
# curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
# PHP bashing time: Who in their right minds would create a function
# that spews its return value to stdout by default, unless explicitly
# instructed not to do so.
resp = requests.post(
# $process = curl_init($url);
url,
# $params = array(
# 'username' => $username,
# 'password' => $password
# );
# $params_string = json_encode($params);
# curl_setopt($process, CURLOPT_POSTFIELDS, $params_string);
# $headers[] = 'Content-Type: application/json';
# curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
json=dict(username=username, password=password),
# curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
# note: you shouldn't do this, really
verify=False,
)
data = resp.text
# or if you expect json response
data = resp.json()