簡體   English   中英

PHP cURL內容長度和內容類型錯誤

[英]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_POSTFIELDSCURLOPT_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM