PHP cURL Content-Length和Content-Type错误

前端之家收集整理的这篇文章主要介绍了PHP cURL Content-Length和Content-Type错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过 PHP cURL登录到一个网站,我只收到“错误请求”的响应.

我使用hosts文件播放,并将其设置到我的服务器,以检查我的浏览器发送的请求标头,并将其与cURL发送的请求标头进行比较.

一切都是平等的,除了:

浏览器:

Content-Type: application/x-www-form-urlencoded
Content-Length: 51

PHP cURL:

Content-Length: 51,359
Content-Type: application/x-www-form-urlencoded; boundary=----------------------------5a377b7e6ba7

我已经用这个命令设置了这个值,但它仍然发送错误的头文件

curl_setopt($this->hCurl,CURLOPT_HTTPHEADER,array(
    'Expect:','Content-Type: application/x-www-form-urlencoded','Content-Length: 51' 
));
你不必自己设置内容长度.如果您使用cURL发送HTTP POST,则会为您计算内容长度.

如果将CURLOPT_POSTFIELDS值设置为数组,它将自动将请求作为multipart / form-data提交,并使用边界.如果你传递一个字符串,它将使用application / x-www-form-urlencoded,所以确保将一个urlencoded字符串传递给CURLOPT_POSTFIELDS,而不是一个数组,因为你想要形式urlencoded.

你需要这样做:

$data = 'name=' . urlencode($value) . '&name2=' . urlencode($value2);
curl_setopt($this->hCurl,CURLOPT_POSTFIELDS,$data);

// NOT

$dataArray = array('name' => 'value','name2' => 'value2');
curl_setopt($this->hCurl,$dataArray);

在这两种情况下,您不需要设置内容长度,但您必须使用第一种方法获取表单上的application / x-www-form-urlencoded encoding.

如果没有帮助,请发布与设置卷曲请求相关的所有代码(所有选项和您传递给它的数据),这有助于解决问题.

编辑:

添加的是我想出的一个例子(我登录失败).

<?PHP

$URL_HOME  = 'http://ilocalis.com/';
$LOGIN_URL = 'https://ilocalis.com/login.PHP';

$ch = curl_init($URL_HOME);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

$home = curl_exec($ch);

//echo $home;

$post = array('username' => 'drew','password' => 'testing 123');
$query = http_build_query($post);

curl_setopt($ch,CURLOPT_URL,$LOGIN_URL);
curl_setopt($ch,CURLOPT_POST,$query);

$login = curl_exec($ch);

echo $login;

猜你在找的PHP相关文章