Php cURL登录:Base-64字符数组的长度无效

Php cURL登录:Base-64字符数组的长度无效,php,curl,asp-classic,Php,Curl,Asp Classic,我已经找到我的问题了。 类似于这个问题的问题太多了,但我无法得出任何结论 我已经编写了以下代码 <?php $aPosts = array("__VIEWSTATE" => "/wEPDwULLTEwMDM5MDE3NDUPZBYEZg8VARJTYWZhcmFmYXJpbi1TZXBlaHJkAgEPZBYEAgUPEA8WAh4LXyFEYXRhQm91bmRnZGRkZAINDxYCHgdWaXNpYmxlaBYCZg9kFgJmDxUBE9io2K7YtNmG2KfZhdm

我已经找到我的问题了。 类似于这个问题的问题太多了,但我无法得出任何结论

我已经编写了以下代码

<?php

$aPosts = array("__VIEWSTATE" => "/wEPDwULLTEwMDM5MDE3NDUPZBYEZg8VARJTYWZhcmFmYXJpbi1TZXBlaHJkAgEPZBYEAgUPEA8WAh4LXyFEYXRhQm91bmRnZGRkZAINDxYCHgdWaXNpYmxlaBYCZg9kFgJmDxUBE9io2K7YtNmG2KfZhdmHINmH2KdkZMdboHK0C5vwU/0H8jDKN8JIUGAWK7y6psPERPkF/dYP",
                "__EVENTVALIDATION" => "/wEWBwLVs6iwDQKl1bK4CQK1qbSRCwLHlbuRCALGla+RCAKC3IeGDAKqs9XKA+XnuPlm+7BeBMKdG9tnXAq2MVVFKjVmbCbQG4g9jB9u",
                "txtUsername" => "",
                "txtPassword" => "d41d8cd98f00b204e9800998ecf8427e",
                "dplLanguage" => "en",
                "btnPublicLogin" => "login",
);
$posts = "";
foreach($aPosts as $key => $value){
    $posts .= $key . "=" . $value . "&";
}

$url="http://www.example.com/login.aspx";
$cookie="cookiew.txt";
$rnd = rand(2547896321456987, 9999999999999999);
//$postdata = 'dplLanguage=fa&txtUsername=&txtPassword=d41d8cd98f00b204e9800998ecf8427e&__VIEWSTATE=/wEPDwULLTEwMDM5MDE3NDUPZBYEZg8VARJTYWZhcmFmYXJpbi1TZXBlaHJkAgEPZBYEAgUPEA8WAh4LXyFEYXRhQm91bmRnZGRkZAINDxYCHgdWaXNpYmxlaBYCZg9kFgJmDxUBE9io2K7YtNmG2KfZhdmHINmH2KdkZMdboHK0C5vwU/0H8jDKN8JIUGAWK7y6psPERPkF/dYP&__EVENTVALIDATION=/wEWBwLVs6iwDQKl1bK4CQK1qbSRCwLHlbuRCALGla+RCAKC3IeGDAKqs9XKA+XnuPlm+7BeBMKdG9tnXAq2MVVFKjVmbCbQG4g9jB9u';
$postdata = $posts;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);

$rnd = rand(2547896321456987, 9999999999999999);
curl_setopt ($ch, CURLOPT_REFERER, $url);

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$a = curl_exec ($ch);
$url= 'http://www.example.com/search.aspx';

curl_setopt ($ch, CURLOPT_URL, $url);
$a = curl_exec ($ch);
curl_close($ch);
?>

如果我没有发送变量_VIEWSTATE和_EVENTVALIDATION,页面将返回登录屏幕。 但是当我使用这个变量时,我看到了这个错误: Base-64字符数组的长度无效。

请尝试:


foreach($aPosts as $key => $value){
    $posts .= $key . "=" . urlencode($value) . "&";
}
$posts = trim($posts, "=");

希望此功能有助于取代您的foreach:

http_build_query($aPosts);

正如错误消息所说,base64数据无效。您应该指定原始数据并通过
base64\u encode()
传递,而不是指定静态字符串。你把它的末端修剪掉了吗?