iOS HTTP Post:如何发布到网站,Objective C身份验证,NSURLConnection

时间:2014-05-02 01:25:41

标签: php html ios http

我对HTTP发布和NSURL连接有疑问。

我基本上试图允许用户在两​​个UITextfields中提交用户名和密码,然后按提交,然后将数据发布到网站以检索应该关注的网页。

此链接:Sending an HTTP POST request on iOS 带我完成了发布的步骤。

但是,我不知道发布什么,我的主要问题是我究竟发布了什么?

查看下面的html文字,我已经标记了重要部分,我认为我已经确定了输入字段的位置。

可在此处找到实际网页:https://grades.bsd405.org/Pinnacle/Gradebook/Logon.aspx?ReturnUrl=%2fpinnacle%2fgradebook%2fDefault.aspx

<title>
Logon
</title></head>
<body>
<form name="aspnetForm" method="post" action="Logon.aspx?ReturnUrl=%2fpinnacle%2fgradebook%2fDefault.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">
<div>


//*********************Important Part**************


<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNTkxNzI3MDIzD2QWAmYPZBYCAgMPZBYGAgEPZBYCAgkPZBYCAgEPZBYIAgMPFgIeB1Zpc2libGVoZAIFDxYCHwBoZAIHDxYCHwBoZAIJDxYCHgVzdHlsZQUjdmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6bm9uZTtkAgMPDxYCHwBoZGQCBQ9kFghmD2QWAgINDxYCHgVjbGFzcwUQc2luZ2xlU2Nob29sTGlzdBYCAgEPZBYCAgEPEGQPFgFmFgEQBQ5EZWZhdWx0IERvbWFpbgUIUGlubmFjbGVnZGQCAg9kFgICEw9kFgICAQ9kFgICAQ8QZGQWAGQCBw8PFgIeBFRleHQFIFBpbm5hY2xlIEdyYWRlIDIwMTIgV2ludGVyIEJyZWFrZGQCCA8PFgIfAwU3Q29weXJpZ2h0IChjKSAyMDEzIEdsb2JhbFNjaG9sYXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLmRkZP/l6irI9peZfyqpKjk3fwLuEbos" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }    
}
//]]>
</script>

<script src="/Pinnacle/Gradebook/WebResource.axd?d=MKdmk7ZC1nvFfTogGIArChQeNgmKJPcE4qzLcGnpfZJ_MwOZqxXfEQFvNKhYWoSExczePpNG2SwohpXs5S4lkWiwSEE1&amp;t=635199506789012606" type="text/javascript"></script>

<script src="/Pinnacle/Gradebook/WebResource.axd?d=QiUW-MpIGJoCa8EDLpgXqfBtbKW0jPJO_EJvZ6NQ17SDkob_qrGf6zm_PG2jBXFiWqNQe0AtpCJzCpPTspLqNV3WSqo1&amp;t=635199506789012606" type="text/javascript"></script>
<script src="/Pinnacle/Gradebook/WebResource.axd?d=bFqtqAFaC83zj7YLREFMNw9QVufpzfSZwdn4cGXXtEIwjMANvD40JtS6bauz35cz3GQJdZmtseUAd1OZ4R1Qi84k_0I1&amp;t=635199506789012606" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script>

<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBgKjnbqUCQLnksmgAQKTpbWbDgLB5+KIBAL4xb20BAK20ZqiCel6sQLBsF1W3XHOxpgq+tJj+Rx2" />
</div>
    <script type="text/javascript" src="/Pinnacle/Gradebook/Scripts/Dialog.js?14.4.2.7">
</script>
<script type="text/javascript" src="/Pinnacle/Gradebook/Scripts/Timer.js?14.4.2.7">                 
</script>
<script type="text/javascript" src="/Pinnacle/Gradebook/Scripts/Search.js?14.4.2.7">         
</script>
<script type="text/javascript" src="/Pinnacle/Gradebook/Scripts/Watermark.js?14.4.2.7">
</script>
<script type="text/javascript" src="/Pinnacle/Gradebook/Scripts/AdvancedSearch.js?14.4.2.7"></script>
<script type="text/javascript" src="/Pinnacle/Gradebook/Scripts/Header.js?14.4.2.7">
</script>

<link rel="stylesheet" type="text/css" href="/Pinnacle/Gradebook/Styles/Header.css?14.4.2.7" />
<link rel="stylesheet" type="text/css" href="/Pinnacle/Gradebook/Styles/Nav.css?14.4.2.7" />

1 个答案:

答案 0 :(得分:2)

我收集了from your other question您无法访问源代码或Web开发人员的信息。这是加速这一进程的唯一途径。

如果没有这个,这将是一个费力的过程

  1. 在网络浏览器中执行请求;

  2. 使用Charles进行观察,查看从服务器收到的HTML并对所进行的工程进行反向工程(例如,您可以快速看到这些神秘的_EVENTVALIDATION,{{您在PageUniqueId的初始_VIEWSTATE请求中收到的原始网页中包含的1}}和GET值;

  3. 然后弄清楚如何解析HTML以获取所需的信息(例如,有时您可以使用正则表达式,但正确的实现可能需要HPPLE;请参阅Wenderlich's article on parsing HTML);

  4. 编写发出请求的代码(例如Login.aspx初始GET页面的请求,解析响应(如上面第3点所述),并弄清楚如何把它创建出你在上面第2点观察到的响应(例如,当我指出in your other question时,你必须百分之百地逃避这些值。)

  5. 然后,您可能会发现自己在用户与Web服务器交互的每个阶段重复这四个步骤。根据服务器的复杂程度,这可能是一个缓慢而费力的过程。