微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐