Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过脚本将我的登录凭据发送到Hotmail?_Javascript_Php_Json_Credentials_Hotmail - Fatal编程技术网

Javascript 如何通过脚本将我的登录凭据发送到Hotmail?

Javascript 如何通过脚本将我的登录凭据发送到Hotmail?,javascript,php,json,credentials,hotmail,Javascript,Php,Json,Credentials,Hotmail,我想制作一个脚本,将我的用户名和密码发送到hotmail,这样我就可以不用通过登录页面登录。出于各种原因,我不想使用“自动登录”选项。我查看了源代码,试图了解Hotmail是如何将凭据发送到服务器进行验证的,但我无法从源代码中看出正误。感谢您的帮助 我读了一篇文章,问了一些非常相似的问题,但目的不同——尽管给出的答案不是我想要的。如果您的浏览器没有实际访问hotmail.com登录页面,这是不可能的,原因有很多: 您不能使用PHP来实现这一点,因为PHP完全是服务器端的,登录服务器对您(客户端)

我想制作一个脚本,将我的用户名和密码发送到hotmail,这样我就可以不用通过登录页面登录。出于各种原因,我不想使用“自动登录”选项。我查看了源代码,试图了解Hotmail是如何将凭据发送到服务器进行验证的,但我无法从源代码中看出正误。感谢您的帮助


我读了一篇文章,问了一些非常相似的问题,但目的不同——尽管给出的答案不是我想要的。

如果您的浏览器没有实际访问hotmail.com登录页面,这是不可能的,原因有很多:

  • 您不能使用PHP来实现这一点,因为PHP完全是服务器端的,登录服务器对您(客户端)完全没有影响。它会自己登录,而不是你
  • 您也不能使用javascript为来自不同域(不是hotmail.com)的hotmail.com设置任何类型的cookie/会话,因为存在安全防护措施,确保您无法从域B上的页面为域a设置cookie
  • HTTP协议也不允许从其他域发出POST请求,因此此处也不允许。您的浏览器将阻止来自a.com上试图发布到服务器B.com的页面的任何发布请求
  • Hotmail强制您首先转到他们的登录页面以获取带有会话ID的特殊cookie。只有当此特殊会话ID与POST请求一起发送回来时,Hotmail才会允许请求通过。所以你还是要先得到sessionID

  • 简言之:没有。

    通过浏览器实现自动化的解决方案

    由用户574632建议。这不是唯一的解决办法,但更容易

    我提出了两个解决方案;一个用于Internet Explorer,另一个用于Firefox。这两种解决方案都使用浏览器来自动执行此任务

    解决方案1--Internet Explorer和AutoIt

    碰巧的是,AutoIt非常擅长自动化IE的功能。在AutoIt帮助论坛上阅读了一个类似的问题后,我找到了我所需要的大部分内容。我刚刚添加了对命令行参数的支持。以下是用AutoIt编写的代码:

    #include <IE.au3>
    Opt("WinTitleMatchMode", 2)
    
    $oIE = _IECreate ("http://login.live.com/login.srf?wa=wsignin1.0&rpsnv=10&ct=1227208038&rver=5.5.4177.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx%3Fn%3D1521319951&id=64855")
    _IELoadWait ($oIE)
    
    $o_form = _IEFormGetObjByName ($oIE, "f1")
    $o_login = _IEFormElementGetObjByName ($o_form, "login")
    $o_password = _IEFormElementGetObjByName ($o_form, "passwd")
    $o_signin = _IEFormElementGetObjByName ($o_form, "SI")
    
    $username = $CmdLine[1] ; "YOUR_HOTMAIL_ADDRESS@hotmail.com"
    $password = $CmdLine[2] ;"YOUR_PASSWORD"
    
    _IEFormElementCheckBoxSelect ( $o_form, "remMe", "", 0)
    
    _IEFormElementSetValue ($o_login, $username)
    _IEFormElementSetValue ($o_password, $password)
    
    _IEAction ($o_signin, "click")
    
    WinSetState ( "Internet", "", @SW_MAXIMIZE )
    
    然后将宏命名为“HotmailLogin.iim”

    要使用它,只需使用以下命令行参数创建快捷方式:


    “C:\ProgramFiles(x86)\Mozilla Firefox\Firefox.exe”imacros://run/?m=HotmailLogon.iim

    使用firefox,我只创建了一个名为hm的书签 在“位置”框中,粘贴以下代码, 当我加载hotmail页面时,我只需单击书签

    javascript:%20document.getElementsByName('login').item(0).value='yourname@hotmail.co.uk';%20document.getElementsByName('passwd').item(0).value='yourpass';%20document.getElementsByName('SI').item(0).click();%20void(0);
    

    你应该以登录请求的方式询问hotmail接受了什么,而不是一开始就希望它能起作用。我还以为hotmal被发送到了永恒的webmail字段。我以为现在的MS正在维护live.com没有Hotmail API,所以简短的回答是没有。更详细的回答是,你可以创建一个应用程序来实现这一点,但是,我认为这将违反他们的许多协议,因为此时您正在使用第三方工具访问他们的系统。但是,您可以制作一个页面,通过按下按钮向hotmail服务器发出POST请求,在那里发送您的密码和用户名,从而启动登录过程。但是你为什么要这样?我相信这个答案还需要更多的研究。我想说Hotmail只接受来自其自己的服务器或域的post请求是不准确的,因为如果没有来自浏览器的post请求,您的计算机如何向Hotmail发送登录所需的凭据?如果你能改进你的答案,或者能提供更多的信息,我会支持你的答案。为什么不准确?浏览器向服务器发出请求,然后显示结果。生成的页面(来自hotmail.com域)可以包含一个表单,该表单在提交时会向同一域(hotmail.com)发出另一个POST请求。它不能向其他服务器(如google.com)发出POST请求,除非所涉及的页面实际上来自google.com。这是由浏览器处理的。除此之外,Hotmail还提供了大量保护,以确保您首先访问他们的登录页面(他们在其中设置了会话cookie),并且通过将会话ID发送回,他们将允许继续登录。@Klik这更好吗?是的,这是更好的描述。就我个人而言,我不喜欢回答说有些事情是不可能的,因为任何事情在技术上都是可能的,尽管这种方法可能很困难。根据您自己的描述,您需要首先获取sessionID,这可以通过模拟浏览器来完成。这超出了我的能力,但这是可能的。
    javascript:%20document.getElementsByName('login').item(0).value='yourname@hotmail.co.uk';%20document.getElementsByName('passwd').item(0).value='yourpass';%20document.getElementsByName('SI').item(0).click();%20void(0);