カールポスト - 長さが必要です
-
21-12-2019 - |
質問
私のウェブサイトにログインするための簡単なコードを作りました。
private function request($url, $reset_cookies, $post_data)
{
$options = array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HEADER => 0,
CURLOPT_FAILONERROR => 1,
CURLOPT_USERAGENT => $this->user_agent,
CURLOPT_CONNECTTIMEOUT => 30,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_MAXREDIRS => 10,
CURLOPT_AUTOREFERER => 1,
CURLOPT_COOKIESESSION => $reset_cookies ? 1 : 0,
CURLOPT_COOKIEJAR => $this->session_id,
CURLOPT_COOKIEFILE => $this->session_id,
);
// Add POST data
if (isset($post_data))
{
$options[CURLOPT_CUSTOMREQUEST] = 'POST';
$options[CURLOPT_POST] = 1;
$options[CURLOPT_POSTFIELDS] = http_build_query($post_data);
}
// Attach options
curl_setopt_array($this->curl, $options);
// Execute the request and read the response
$content = curl_exec($this->curl);
// Handle any error
if (curl_errno($this->curl)) throw new Exception(curl_error($this->curl));
return $content;
}
.
基本的に、私のログインシステムの通常のステップは次のとおりです。
-
セキュリティトークンを取得してCookieセッションを初期化するように取得要求を送信します。(行って作業)
$security_token = $this->browser->request('https://mysite.com/login', true, null);
-
ユーザー名、パスワード、セキュリティトークンでPOSTリクエストを送信します。
$postdata = array( 'login' => $login, 'password' => $password, '__RequestVerificationToken' => $security_token, ); $login_page = $this->browser->request('https://mysite.com/login', false, $postdata);
ステップ#2では、コンテンツの長さが要求されていると言って411エラーが発生しました。
私は何か問題を犯した、またはパラメータを設定するのを忘れましたか?
解決
解決策はこの線を取り除くことでした
$options[CURLOPT_CUSTOMREQUEST] = 'POST';
. 所属していません StackOverflow