我正在尝试使用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
)
1条答案
按热度按时间hlswsv351#
我建议拆分$apiQuery字符串:
http_build_query
还对url进行参数转义。