2012-10-15 92 views
1

我正在嘗試使用cURL(在bash腳本中)在包含我每月數據使用情況的ISP網站上加載頁面。這個curl請求爲什麼不提交POST數據?

下面是從頁的培訓相關表格:

<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數據或我做錯了什麼?

更新:回答了我自己的問題。見下面的解決方案。

回答

1

問題被路過的POST數據在一個參數捲曲是導致當捲曲做了URL的數據進行錯位比較編碼。正確的用法是將每個字段作爲單獨的參數傳遞,如下所示:

curl --data-urlencode "username=XXXXXX" --data-urlencode "password=XXXXXX" ... 
+0

或者你的&符號可以改爲%26? – Sun

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 

cURL頭與LiveHttpHeaders firefox module

+0

不起作用 - 與我的命令結果相同。它只是重新回到登錄頁面,並添加了額外的文字說明沒有輸入用戶名和密碼。 –

+0

添加'-v'開關來跟蹤發生了什麼,並將其與LiveHttpHeaders firefox模塊進行比較。 –

+0

而不是-v我使用了--trace-ascii,並將頭與LiveHttpHeaders顯示的內容進行了比較。 POST數據正在被破壞,因爲我沒有將它傳遞給捲曲正確性。你的回答不是解決問題的方法,但它確實使我朝着正確的方向前進!謝謝。 –

相關問題