php curl returns 400 错误请求

php curl returns 400 Bad Request

伙计们。

我写了一个脚本来使用代理从一些 link 中获取内容。 如果您知道原因并有建议,请帮助我。 谢谢

当我运行下面的代码时,它显示 400 错误代码。

$linkCheck = "https://www.uwgc.org/give/donor-networks/step-up-program/2016/03/14/oh-the-places-she's-going";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $linkCheck);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, $workingProxy['port']);
curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_PROXY, $workingProxy['ip']);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $workingProxy['username'].':'.$workingProxy['password']);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 

$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error_report= curl_getinfo($ch);
curl_close($ch);

if($httpcode != 200){
        echo '<pre>' . $httpcode .'</pre>' ;
    return null;
}else{
    return $data;
}

预期行为:

获取给定 link 的正确内容。

@大家。 感谢您的提示。

最后,我的代码几乎可以在以下配置下运行。

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$linkCheck);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,$fetchTimeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $fetchTimeout);

顺便说一句,我还有一个问题。 当 url 包含重音符号 (/clasificación) 等奇数字符时,它不会出现致命错误。

当我使用 /clasificaci%C3%B3n 而不是上面的方式时,它又可以工作了。 所以,这是我的问题。 如何更改奇数字符串,使其有效 url.

非常感谢。

使用 Curl 比其他方式面临更多挑战。只需使用 php shell_exec 函数

$cmd = "curl -k -v -X POST 'https://serveraddress:8243/?foo=bar' -H 'Authorization: Basic cEZ.....h'";

$result = shell_exec($cmd);         
$output =  json_decode($result,true);
print_r($output);