我正在尝试将以下PHP curl_setopt()转换为Python Requests中的等效程序以及CLI curl。对于Python,如果在请求中不可能,我将使用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中尝试了以下操作,但出现了错误请求错误:
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()
curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
这个选项只是说curl_exec()
的结果被传递给一个返回变量。在命令行上,默认情况是输出到标准输出。
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
这是一个非常糟糕的主意,会让你很容易受到中间人的攻击。没有理由使用它。--insecure
是等效的命令行选项。
另外值得一提的是,您正在传递一个JSON字符串作为CURLOPT_POSTFIELDS
的参数,并且CLI代码中没有进行JSON编码。