如何在PHP中阻止cURL格式化URL字符串

jw5wzhpr  于 2023-02-23  发布在  PHP
关注(0)|答案(1)|浏览(126)

我正在尝试使用cURL解析API请求,但是经过几个小时的调试后,我刚刚发现(使用curl_getinfo)我的URL正在格式化-特别是特殊字符,如/?
这是由于我正在使用urlencode($apiQuery)来格式化url以删除空格,但附带地导致了整个url的问题。
我尝试用PHP编写此代码,并将cURL请求设置为如下所示:

$apiQuery = 'api.server.com/v0/Accounts/USER/INSTRUMENT?channels=all&start=2022-10-30 21:00:00';

$headers = array(
    'Accept: application/json',
    'Content-Type: application/json',
);

$c = curl_init();
curl_setopt($c, CURLOPT_URL, urlencode($apiQuery));
curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
curl_setopt($c, CURLOPT_HEADER, 0);
curl_setopt( $c , CURLOPT_RETURNTRANSFER, true);
curl_setopt( $c , CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $c , CURLOPT_SSL_VERIFYHOST, false);
curl_setopt( $c , CURLOPT_TIMEOUT, 50000); // 50 sec

$resultA = curl_exec($c);

print_r(curl_getinfo($c));

其中$resultA不返回任何值,curl_getinfo($c)返回:

Array
(
    [url] => HTTP://api.server.com%2Fv0%2FAccounts%2FUSER%2FINSTRUMENT%3Fchannels%3Dall%26start%3D2022-10-30+21%3A00%3A00/
    [content_type] =>
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0
    [namelookup_time] => 0
    [connect_time] => 0
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] =>
    [primary_ip] =>
    [certinfo] => Array
        (
        )

    [primary_port] => 0
    [local_ip] =>
    [local_port] => 0
)
hlswsv35

hlswsv351#

我建议拆分$apiQuery字符串:

$apiQuery = 'http://api.server.com/v0/Accounts';

$apiQuery .= '/' . urlencode($user);
$apiQuery .= '/' . urlencode($instrument);
$apiQuery .= '?';

$apiQuery .= http_build_query([
    'channels' => 'all',
    'start' => '2022-10-30 21:00:00',
]);

http_build_query还对url进行参数转义。

相关问题