首页 > 解决方案 > 将 PHP Curl 转换为 Python 请求

问题描述

此代码在 PHP 中调用带有一些标头和数据的 curl 发布请求。

<?php

    $api = 'someapi';
    $method = 'somemethod';
    $api_path = "someurl";
    $data = array(
        'start_datetime' => '2021-07-15 13:00:00',
        'end_datetime' => '2021-07-15 13:20:00',
        'token' => 'sometoken' // token from file
    );
    
    $params = array(
        "api"=> $api, 
        "method"=>$method, 
        "data"=> json_encode($data)
    );
    
    $secure_key = "somesecret";

    $header = array();
    $header[] = 'SECUREKEY:'.$secure_key;

    // call curl
    $__curl_handle = curl_init();
    curl_setopt($__curl_handle, CURLOPT_URL, $api_path);
    curl_setopt($__curl_handle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($__curl_handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($__curl_handle, CURLOPT_POST,1);
    curl_setopt($__curl_handle, CURLOPT_POSTFIELDS, http_build_query($params));
    curl_setopt($__curl_handle, CURLOPT_HTTPHEADER, $header);

    $response = curl_exec($__curl_handle);
    $errno    = curl_errno($__curl_handle);
    $errmsg   = curl_error($__curl_handle);

    $result_arr = array(
        'response'=>$response,
        'errno'=>$errno,
        'errmsg'=>$errmsg
    );

    curl_close($__curl_handle); 

    echo $result_arr['response'];

?>

现在我需要在 python 项目中做同样的事情。由于我是 Python 新手,我可以请求一些帮助吗?

这是我的尝试:

    api = 'someapi'
    method = 'somemethod'
    api_path = "someurl"
    data = {
        'start_datetime' : '2021-07-15 13:00:00',
        'end_datetime' : '2021-07-15 13:20:00',
        'token' : 'sometoken' // token from file
    }
    
    params = {
        "api": api, 
        "method":method, 
        "data": json.dumps(data)
    }
    
    secure_key = "somesecret";

    header = {
        "SECUREKEY":secure_key
    }

    response = requests.post(api_path,
                            data=params,
                            headers=header)

    print(response.json())

但它没有按预期工作。这个怎么做?

标签: pythonphp

解决方案


对于任何cURL请求,最好的测试工具是Postman,它是免费的。
您可以使用图形界面提出请求,您可以通过单击</>图标将其转换为任何代码语言(也包括 Python)

在此处输入图像描述

我也在 PHP 中编写代码,但我相信这将为您提供 Python 代码

import requests

url = "someapi_url"

payload={'start_datetime': '2021-07-15 13:00:00',
'end_datetime': '2021-07-15 13:20:00',
'token': 'sometoken'}
files=[

]
headers = {
  'SECUREKEY': '--SECUREKEY_VALUE--'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

推荐阅读