Webサイトにログインしようとしていますが、ユーザー名またはパスワードを使用しているかのように「認証に失敗しました」というエラーが表示されます。私はJavaで同じコードを開発し、それが動作するように、渡されたパラメータは、ユーザー名とパスワードを含む正しいです。フィールドを送るときに私は間違いを犯していますか?次のようにPHP:http投稿要求を送信しますが、「認証に失敗しました」
$cookies = array();
foreach ($http_response_header as $hdr) {
if (preg_match('/^Set-Cookie:\s*([^;]+)/', $hdr, $matches)) {
parse_str($matches[1], $tmp);
$cookies += $tmp;
}
}
$cookie= reset($cookies);
$request = array(
'http' => array(
'method' => 'POST',
'timeout' => 0,
'header'=> "Accept-language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3\r\n" .
"Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n" .
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6\r\n" .
"Cookie: ASP.NET_SessionId=".$cookie."\r\n",
'content' => http_build_query(array(
'__LASTFOCUS' => '',
'__EVENTTARGET' => '',
'__EVENTARGUMENT' => '',
'__VIEWSTATE' => $viewstate,
'__VIEWSTATEGENERATOR' => $viewstategenerator,
'ctl00$hwsid' => $hwsid,
'ctl00$PageSessionId' => $pagesessionid,
'ctl00$DefaultUrl' => $defaulturl,
'ctl00$GenericErrorUrl' => $genericerrorurl,
'ctl00$PopupElement' => '',
'ctl00$PollingTimeoutSecs' => $pollingtimeoutsecs,
'ctl00$bodyContent$txtUser' => $user,
'ctl00$bodyContent$txtPassword' => $password,
'__CALLBACKID' => '__Page',
'__CALLBACKPARAM' => '"hwsid="'.$hwsid.'"&PageSessionId="'.$pagesessionid.'"&DefaultUrl="'.$defaulturl.'"&GenericErrorUrl="'.$genericerrorurl.'"&PopupElement="'.'"&PollingTimeoutSecs="'.$pollingtimeoutsecs.'"&txtUser="'.$user.'"&txtPassword="'.$password,
'__EVENTVALIDATION' => $eventvalidation,
'ctl00$bodyContent$btnLogin' => 'Conferma'
)),
)
);
$context = stream_context_create($request);
$res= file_get_contents($url, false, $context);
echo htmlentities($res);
for Javaの使用作業コードは次のとおりです。
cookies = initialResponse.cookies();
initialResponse = Jsoup.connect(url+"Default.aspx")
.data("__LASTFOCUS", "")
.data("__EVENTTARGET", "")
.data("__EVENTARGUMENT", "")
.data("__VIEWSTATE", executionVal)
.data("__VIEWSTATEGENERATOR", vv1)
.data("ctl00$hwsid", a11)
.data("ctl00$PageSessionId", a22)
.data("ctl00$DefaultUrl", a33)
.data("ctl00$GenericErrorUrl", a44)
.data("ctl00$PopupElement", "")
.data("ctl00$PollingTimeoutSecs", a66)
.data("ctl00$bodyContent$txtUser", user)
.data("ctl00$bodyContent$txtPassword", pass)
.data("__CALLBACKID", "__Page")
.data("__CALLBACKPARAM", "hwsid="+a11+"&PageSessionId="+a22+"&DefaultUrl="+a33+"&GenericErrorUrl="+a44+"&PopupElement="+"&PollingTimeoutSecs="+a66+"&txtUser="+user+"&txtPassword="+pass)
.data("__EVENTVALIDATION", ltVal)
.data("ctl00$bodyContent$btnLogin", "Conferma")
.cookies(cookies)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36")
.method(Method.POST)
.timeout(0)
.execute();
}catch(UnknownHostException e){
JOptionPane.showMessageDialog(null, "No", "Turni", JOptionPane.ERROR_MESSAGE);
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
cookies.putAll(initialResponse.cookies());
Document doc = null;
try {
doc = Jsoup.connect(u)
.cookies(cookies)
.get();
} catch (IOException e) {
e.printStackTrace();
}
最終的なURL、Cookie、およびPOST本文を調べると役立つ場合があります。それらを実用的なバージョンと比較してください。 – miken32
私は、実際に私が最初のクッキーが生成されたウェブサイト(ASP_NET_SessionId = wpxfk3msbyghw5nlo2wlxer)にアクセスしたときに理解したと思う、そのクッキーをリクエストポストに送ったら、サイトは別のものにアクセスしてアクセスすることができます。ポスト最終要求にそう (SSOAuth = DF1D63B311125E1C34689C7D16B4BE4D798E718C1A037B189A2284797B7FFB)を追加する必要があり、クッキーは、2枚のクッキーを追加します「ASP_NET_SessionId = wpxfk3msbyghw5nlo2wlxer; SSOAuth = DF1D63B311125E1C34689C7D16B4BE4D798E718C1A037B189A2284797B7FFB」が、どのように私は、コードで取得し、第二のクッキーを追加するには? – Enzo