[英]PHP cURL Content-Length and Content-Type wrong
我正在嘗試通過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
給CURLOPT_POSTFIELDS
而不是數組,因為您需要form-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, CURLOPT_POSTFIELDS, $dataArray);
在任何一種情況下,您都不需要設置內容長度,但必須使用第一種方法在application/x-www-form-urlencoded
上獲取application/x-www-form-urlencoded
編碼。
如果這沒有用,請發布與設置curl請求相關的所有代碼(所有選項和傳遞給它的數據),這應該有助於解決問題。
編輯:
添加了一個我想出的例子(我登錄失敗)。
<?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, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
$login = curl_exec($ch);
echo $login;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.