1

我正在尝试使用 cURL(在 bash 脚本中)在我的 ISP 站点上加载包含我每月数据使用情况的页面。

这是页面中的相关表格:

<form method="post" id="Login" name="Login" action="https://signon.bigpond.com/login" class="form">
    <input type="hidden" name="goto" value="https://my.bigpond.com/mybigpond/default.do?ref=Net-Header-MyBigPond1"/>

    <div class="loginModule roundify">
        <div class="loginForm">

            <div class="formRow error">
                <label for="userName">
                    Username<span class="reqField">*</span>
                </label>
                <input type="text" tabindex="1" id="username" name="username" size="30" maxlength="200" onkeypress="EnterKeyPress(event)" value=""/>
            </div>

            <div class="formRow error">
                <label for="password">
                    Password<span class="reqField">*</span>
                </label>
                <input type="password" tabindex="2" id="password" name="password" size="30" maxlength="50" onkeypress="EnterKeyPress(event)"/>                                     
            </div>

           <div class="buttons">
                <input class="submit roundify" type="submit" value="Log in" onclick="setCookieForUser();this.disabled=true;document.forms['Login'].submit();" />
            </div>
        </div>
    </div>
</form>

请注意,提交按钮没有名称。

在表单中输入文本时调用的函数:

function EnterKeyPress(e) {
    if (!e) var e = window.event;

                if (e.keyCode) code = e.keyCode;
                else if (e.which) code = e.which;

                if ( code == 13 && document.getElementById("username").value.length > 0 && document.getElementById("password").value.length > 0 ) {
                    document.forms['Login'].submit();
                    e.returnValue = false;
                }
}

cURL 命令行:

 $ curl --user-agent "Mozilla/5.0" --verbose --location --cookie-jar "/tmp/bigpond.cookies" --cookie "/tmp/bigpond.cookies" -o "/tmp/bigpond.html" --data-urlencode "username=MY_USERNAME&password=MY_PASSWORD" https://signon.bigpond.com/login?goto=https://my.bigpond.com/mybigpond/default.do?ref=Net-Header-MyBigPond1

但是,保存的 html 文件 (/tmp/bigpond.html) 仍然只是登录页面,并添加了文本说我忘记输入我的用户名和密码。为什么 cURL 不发送 POST 数据或者我做错了什么?

更新:回答了我自己的问题。解决方法见下文。

4

2 回答 2

1

试试看:

curl -A "Mozilla/5.0" -b /tmp/c -c /tmp/c -L -s -d "username=<USER NAME>&password=<PASSWORD>" https://signon.bigpond.com/login

并比较cURLwith的标题LiveHttpHeaders firefox module

于 2012-10-15T02:59:12.613 回答
1

问题是在一个参数中将 POST 数据传递给 cURL,导致当 cURL 进行 URL 编码时数据被破坏。正确的用法是将每个字段作为单独的参数传递,如下所示:

curl --data-urlencode "username=XXXXXX" --data-urlencode "password=XXXXXX" ...
于 2012-10-17T22:45:05.870 回答