我正在尝试将以下 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);
对于那两个 PHP curl_setopt(s),我需要在 Python请求中设置我所需要的。
我在 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}
我需要什么?
谢谢,感谢您的帮助。
答案 0 :(得分:4)
使用请求:
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()
答案 1 :(得分:2)
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
此选项只是表示将curl_exec()
的结果传递给返回变量。在命令行中,默认为输出到标准输出。
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
这是一个非常糟糕的主意,并且会让你容易受到中间人攻击。没有任何借口可以使用它。 --insecure
是等效的命令行选项。
另外值得一提的是,您正在传递一个JSON字符串作为CURLOPT_POSTFIELDS
的参数,并且没有使用您已获得的CLI代码进行JSON编码。