【问题标题】:Need help with curl post and javascript在 curl 帖子和 javascript 方面需要帮助
【发布时间】:2010-11-22 09:35:25
【问题描述】:

我正在尝试登录某个网站。 我以前在其他网站上做过,但这个网站更复杂。 我使用 LIVE HTTP Headers 来捕获发布请求。 我注意到发布请求已正确完成,但由于某种原因我没有被转移到正确的网址。 我浏览了页面源,我认为这个表单是使用 JS 传输的。

这是在 __VIEWSTATE 变量之后附加到 post 参数的内容:

&ctl00_Menu_MainMenu_ContextData=&ctl00%24middleContent%24TextBoxName=0526579737&ctl00%24middleContent%24TextBoxPass=LIRAN&ctl00%24middleContent%24TextBoxPriv=liran&ctl00%24middleContent%24CheckLicense=on

这是验证此信息的 javascript 函数:

function Continue_Click()
    {
        var LabelError = document.getElementById('ctl00_middleContent_LabelError');
        var lnkButton1 = document.getElementById(middleContent + 'lnkButton1');
        var msg = validateLoginPeleNumRecognizeUser(document.getElementById('ctl00_middleContent_TextBoxName').value);
        if (msg == '')
        {
            if (validateLoginPeleNumEmail(document.getElementById('ctl00_middleContent_TextBoxName').value)){
                musixMail = document.getElementById('ctl00_middleContent_TextBoxName').value;
                var obj = document.getElementById('ctl00_middleContent_TextBoxPriv');
                if (obj != null && obj.value != '')                    
                    msg = validateLoginUserLogin(obj.value);

                if (msg == '')  
                {                        
                    if(document.getElementById('ctl00_middleContent_CheckLicense').checked)
                    {
                        if(log.login('recognize'))
                        {
                            __doPostBack('ctl00$middleContent$lnkButton1','');
                        }
                    }
                    else
                        LabelError.innerHTML = 'עליך להסכים לתנאי השימוש על מנת להמשיך לגלוש באתר';
                }
                else
                    LabelError.innerHTML = msg;
            }
            else{
                msg = validateLoginPasswordLogin(document.getElementById('ctl00_middleContent_TextBoxPass').value);
                if (msg == '')    
                {
                    var obj = document.getElementById('ctl00_middleContent_TextBoxPriv');
                    if (obj != null && obj.value != '')                    
                        msg = validateLoginUserLogin(obj.value);

                    if (msg == '')  
                    {                        
                        if(document.getElementById('ctl00_middleContent_CheckLicense').checked)
                        {
                            if(log.login('recognize'))
                            {
                                __doPostBack('ctl00$middleContent$lnkButton1','');
                            }
                        }
                        else
                            LabelError.innerHTML = 'עליך להסכים לתנאי השימוש על מנת להמשיך לגלוש באתר';
                    }
                    else
                        LabelError.innerHTML = msg;
                }   
                else
                    LabelError.innerHTML = msg;
            }
        }
        else
            LabelError.innerHTML = msg;
    }        
    $(function(){
        $('#ctl00_middleContent_TextBoxName,#ctl00_middleContent_TextBoxPass,#ctl00_middleContent_CellName').keypress(function(e){
            if(e.keyCode==13)                
                Continue_Click();
        });

有谁知道在使用 curl 时如何触发这个功能?

谢谢

【问题讨论】:

  • 您确定它在将您定向到正确页面之前不会尝试检查 cookie 或其他内容吗?
  • 我正在使用 curl 获取 cookie。但我的直觉告诉我,JS 被用于验证通过表单发送的数据。

标签: javascript asp.net curl


【解决方案1】:

Curl 只是一种向服务器发出 HTTP 请求并(可选)记录响应的工具。当您发出您正在考虑的请求时,服务器会发送几 KB 的文本以响应 curl 的请求。

在这种情况下,文本是嵌入(或引用)一些 Javascript 的 HTML。但是 curl 不知道如何解析 HTML,因为它只是一个数据-传输工具。它收到数据 - 工作完成。

所以我认为如果你想让 curl 自动 执行 Javascript,你会陷入死胡同。您需要一个 JS 引擎来执行此操作,以及一个 HTML 引擎来解析 HTML 并计算出应该实际运行的 JS 命令。 RhinoSpidermonkey 可以做前者,但是由于您没有 JS 文件而是 HTML 文件,因此效果不佳。从根本上说,如果您希望它能够普遍、全面和自主地工作,您将需要一个行为与浏览器相同的工具 - 根据定义,浏览器浏览器。

在大多数情况下,如果您正在查看单个站点,您可以通过嗅探浏览器发出的请求来计算 curl 需要发送的请求。通常,在最坏的情况下,您可能需要在返回的文本上使用正则表达式来提取例如会话ID;对于给定的站点,这还不错。如果您不准备承受这种程度的脆弱性,那么 curl 根本不适合您正在做的事情。

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2014-02-06
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多