gpt4 book ai didi

asp.net - 为什么我的 urlFetchApp 功能无法成功登录

转载 作者:行者123 更新时间:2023-12-01 11:34:31 25 4
gpt4 key购买 nike

我正在尝试使用 google 应用程序脚本登录 ASP.Net 网站并抓取一些我通常必须手动检索的数据。我已经使用 Chrome 开发人员工具来获取正确的有效负载名称(TEXT_Username、TEXT_Password、_VIEWSTATE、_VIEWSTATEGENERATOR),我还获得了一个 ASP Net session ID 与我的 Post 请求一起发送。

当我运行我的函数时,如果 followRedirects 设置为 false,它将返回响应代码 = 200,如果 followRedirects 设置为 true,则返回响应代码 = 302。不幸的是,在这两种情况下,这些功能都没有成功验证网站。相反,返回的 HTML 是登录页面的 HTML。

我尝试了不同的 header 变体和参数,但似乎无法成功登录。

其他几点。当我使用开发者工具在 Chrome 中登录时,响应代码似乎是 302 Found。

有人对我如何成功登录此站点有任何建议吗?您是否在我的函数中看到任何可能导致我的问题的错误。我愿意接受任何和所有建议。

我的 GAS 函数如下:

    function login(cookie, viewState,viewStateGenerator) {
var payload =
{
"__VIEWSTATE" : viewState,
"__VIEWSTATEGENERATOR" : viewStateGenerator,
"TEXT_Username" : "myUserName",
"TEXT_Password" : "myPassword",
};
var header = {'Cookie':cookie};
Logger.log(header);
var options =
{
"method" : "post",
"payload" : payload,
"followRedirects" : false,
"headers" : header
};
var browser = UrlFetchApp.fetch("http://tnetwork.trakus.com/tnet/Login.aspx?" , options);
Utilities.sleep(1000);
var html = browser.getContentText();
var response = browser.getResponseCode();
var cookie2 = browser.getAllHeaders()['Set-Cookie'];
Logger.log(response);
Logger.log(html);

}

function loginPage() {
var options =
{
"method" : "get",
"followRedirects" : false,
};
var browser = UrlFetchApp.fetch("http://tnetwork.trakus.com/tnet/Login.aspx?" , options);
var html = browser.getContentText();
// Utilities.sleep(500);
var response = browser.getResponseCode();
var cookie = browser.getAllHeaders()['Set-Cookie'];
login(cookie);
var regExpGen = new RegExp("<input type=\"hidden\" name=\"__VIEWSTATEGENERATOR\" id=\"__VIEWSTATEGENERATOR\" value=\"(.*)\" \/>");
var viewStateGenerator = regExpGen.exec(html)[1];
var regExpView = new RegExp("<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(.*)\" \/>");
var viewState = regExpView.exec(html)[1];
var response = login(cookie,viewState,viewStateGenerator);
return response
}

我通过运行 loginPage() 函数来调用脚本。该函数获取 cookie( session id),然后调用登录函数并传递 session id(cookie)。

以下是我使用 Google 的 Chrome 浏览器登录时在 Google 开发者工具网络部分看到的内容:

    Remote Address: 66.92.89.141:80
Request URL: http://tnetwork.trakus.com/tnet/Login.aspx
Request Method: POST
Status Code:302 Found

**Request Headers** view source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language: en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length: 252
Content-Type:application/x-www-form-urlencoded
Cookie: ASP.NET_SessionId=jayaejut5hopr43xkp0vhzu4; userCredentials=username=myUsername; .ASPXAUTH=A54B65A54A850901437E07D8C6856B7799CAF84C1880EEC530074509ADCF40456FE04EC9A4E47D1D359C1645006B29C8A0A7D2198AA1E225C636E7DC24C9DA46072DE003EFC24B9FF2941755F2F290DC1037BB2B289241A0E30AF5CB736E6E1A7AF52630D8B31318A36A4017893452B29216DCF2; __utma=260442568.1595796669.1421539534.1425211879.1425214489.16; __utmc=260442568; __utmz=260442568.1421539534.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=190106350.1735963725.1421539540.1425152706.1425212185.18; __utmc=190106350; __utmz=190106350.1421539540.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Host:tnetwork.trakus.com
Origin:http://tnetwork.trakus.com
Referer:http://tnetwork.trakus.com/tnet/Login.aspx?
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36

**Form Dataview** sourceview URL encoded
__VIEWSTATE: O7YCnq5e471jHLqfPre/YW+dxYxyhoQ/VetOBeA1hqMubTAAUfn+j9HDyVeEgfAdHMl+2DG/9Gw2vAGWYvU97gml5OXiR9E/9ReDaw9EaQg836nBvMMIjE4lVfU=
__VIEWSTATEGENERATOR:F4425990
TEXT_Username:myUsername
TEXT_Password:myPassword
BUTTON_Submit: Log In

更新:该网站似乎正在使用 HttpOnly cookie。结果,我认为我没有捕获整个 cookie,因此我的标题不正确。因此,我相信我需要将 followRedirects 设置为 false 并手动处理重定向和 cookie。我目前正在研究这个过程,但欢迎任何走这条路的人提供意见。

最佳答案

我终于能够成功登录该页面。问题似乎是 urlFetchApp 无法遵循重定向。我相信这个 stackoverflow 帖子:how to fetch a wordpress admin page using google apps script

这篇文章描述了导致我成功登录的以下过程:

  1. 将 followRedirect 设置为 false
  2. 提交帖子并获取 cookie
  3. 使用捕获的 cookie 发出带有适当 url 的 get。

以下是相关代码:

var url = "http://myUrl.com/";
var options = {
"method": "post",
"payload": {
"TEXT_Username" : "myUserName",
"TEXT_Password" : "myPassword",
"BUTTON_Submit" : "Log In",
},
"testcookie": 1,
"followRedirects": false
};
var response = UrlFetchApp.fetch(url, options);
if ( response.getResponseCode() == 200 ) {
// Incorrect user/pass combo
} else if ( response.getResponseCode() == 302 ) {
// Logged-in
var headers = response.getAllHeaders();
if ( typeof headers['Set-Cookie'] !== 'undefined' ) {
// Make sure that we are working with an array of cookies
var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie'];
for (var i = 0; i < cookies.length; i++) {
// We only need the cookie's value - it might have path, expiry time, etc here
cookies[i] = cookies[i].split( ';' )[0];
};

url = "http://myUrl/Calendar.aspx";
options = {
"method": "get",
// Set the cookies so that we appear logged-in
"headers": {
"Cookie": cookies.join(';')
}
}
...

关于asp.net - 为什么我的 urlFetchApp 功能无法成功登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28794290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com