[英]No response with Curl in php environnement
我在php中有一个奇怪的问题。
我在邮递员的API上发出POST请求。 我有一个答案。 我用Postman生成了php代码(如下所示)。
但用PHP,没有回应。 (适用于另一个POST请求)。
/Applications/MAMP/htdocs/*******/functions.php:108:string''(长度= 0)
你有什么主意吗 ?
function get_id($ immat){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://****.******.fr/*****.do",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 100,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "recherche=******&undefined=",
CURLOPT_HTTPHEADER => array(
"Accept: */*",
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
"Origin: https://*********.fr",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
"X-Requested-With: XMLHttpRequest",
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
var_dump($response);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
var_dump($response);
}
}
我最好的猜测是你编码CURLOPT_POSTFIELDS错了。 你还记得每个@
编码为%40
吗? 你还记得将每个空间编码为%20
吗? 你还记得编码每个&
%26
吗? 我猜答案是否定的。 使用urlencode()或http_build_query()(除了确保所有内容都正确编码之外,如果正确移植到http_build_query(),代码通常会更漂亮)
吹毛求疵:
不要手动设置User-Agent
标头,而是设置CURLOPT_USERAGENT(手动设置标题不能很好地与CURLOPT_FOLLOWLOCATION一起使用,并且很容易忘记在后续请求中设置它...根据经验,使用CURLOPT_USERAGENT代替。)
不要将CURLOPT_CUSTOMREQUEST用于POST请求,设置CURLOPT_POST=>1
- CURLOPT_CUSTOMREQUEST是危险的,因为它不会自动清除(与CURLOPT_POST不同),并且必须在使用完毕后手动设置为NULL,并且当程序员忘记清理CURLOPT_CUSTOMREQUEST时,经常发生错误(如使用错误请求类型的后续请求)
当具体使用application/x-www-form-urlencoded
或multipart/form-data
-formats时,不要手动设置Content-Type
标头,让curl自动设置标头,所以删除这个"Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
(对于第一个,libcurl运行自动测试套件以确保标头中没有拼写错误,与您自己的代码库不同,对于后一种格式,您可能会破坏边界头)
"Accept: */*"
无论如何都是默认的libcurl标头,所以如果你愿意,可以删除它,它没有区别(并且也可以在这里使用拼写错误参数)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.