如何使用pycurl将PHP curl API请求转换为Python

时间:2019-11-29 10:04:55

标签: php python api curl pycurl

在尝试使用pycurl库将带有curl的现有PHP api请求转换为Python时,遇到了一些问题。首先是原始的PHP代码:


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.printdeal.com/api/products/0d1fce7e-245d-47fb-98bf-bea07f3ad16e/attributes",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "API-Secret: MY_SECRET_API-KEY",
    "User-ID: MY_USER_ID"
  ),
));

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

curl_close($curl);

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

然后这是到目前为止我翻译成Python的内容:

from io import BytesIO


b_obj = BytesIO()
crl = pycurl.Curl()

crl.setopt(pycurl.URL, "https://api.printdeal.com/api/products/0d1fce7e-245d-47fb-98bf-bea07f3ad16e/attributes")
crl.setopt(pycurl.ENCODING, "")
crl.setopt(pycurl.MAXREDIRS, 10)
crl.setopt(pycurl.TIMEOUT, 30)
crl.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_1)
crl.setopt(pycurl.CUSTOMREQUEST, 'GET')
crl.setopt(pycurl.HTTPHEADER, [
    "API-Secret: MY_SECRET_API-KEY",
    "User-ID: MY_USER_ID"])
crl.setopt(pycurl.WRITEFUNCTION, b_obj.write)
crl.perform()
crl.close()
data = b_obj.getvalue()
print(data)

如您所见,在pycurl中不是RETURNTRANSFER的选项,我无法使用pycurl找到它的等效项或替代项。当我使用个人凭据执行此代码时,它将返回:

b'{"error":"Not Found"}'

Process finished with exit code 0

我应该添加或更改使用pycurl而不是curl进行成功的api请求?

0 个答案:

没有答案