我正在尝试将以下 PHP curl_setopt() 转换为 Python Requests 中的等效项 以及 CLI curl。对于 Python,如果在 Requests 中不可能, 我会使用 pycurl .
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
这是有效的 PHP curl 代码:
$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 请求 中为这两个 PHP curl_setopt(s) 设置什么。
我在 CLI curl 中尝试了以下操作,但出现了一个Bad Request 错误:
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}
我需要什么?
谢谢,感谢您的帮助。
最佳答案
使用请求:
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()
关于php - 将 PHP curl_setopt() 转换为 Python 请求和 CLI curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36634825/