我对HTTP发布和NSURL连接有疑问。
我基本上试图允许用户在两个UITextfields中提交用户名和密码,然后按提交,然后将数据发布到网站以检索应该关注的网页。
此链接:Sending an HTTP POST request on iOS 带我完成了发布的步骤。
但是,我不知道发布什么,我的主要问题是我究竟发布了什么?
查看下面的html文字,我已经标记了重要部分,我认为我已经确定了输入字段的位置。
<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&t=635199506789012606" type="text/javascript"></script>
<script src="/Pinnacle/Gradebook/WebResource.axd?d=QiUW-MpIGJoCa8EDLpgXqfBtbKW0jPJO_EJvZ6NQ17SDkob_qrGf6zm_PG2jBXFiWqNQe0AtpCJzCpPTspLqNV3WSqo1&t=635199506789012606" type="text/javascript"></script>
<script src="/Pinnacle/Gradebook/WebResource.axd?d=bFqtqAFaC83zj7YLREFMNw9QVufpzfSZwdn4cGXXtEIwjMANvD40JtS6bauz35cz3GQJdZmtseUAd1OZ4R1Qi84k_0I1&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" />
答案 0 :(得分:2)
我收集了from your other question您无法访问源代码或Web开发人员的信息。这是加速这一进程的唯一途径。
如果没有这个,这将是一个费力的过程
在网络浏览器中执行请求;
使用Charles进行观察,查看从服务器收到的HTML并对所进行的工程进行反向工程(例如,您可以快速看到这些神秘的_EVENTVALIDATION
,{{您在PageUniqueId
的初始_VIEWSTATE
请求中收到的原始网页中包含的1}}和GET
值;
然后弄清楚如何解析HTML以获取所需的信息(例如,有时您可以使用正则表达式,但正确的实现可能需要HPPLE;请参阅Wenderlich's article on parsing HTML);
编写发出请求的代码(例如Login.aspx
初始GET
页面的请求,解析响应(如上面第3点所述),并弄清楚如何把它创建出你在上面第2点观察到的响应(例如,当我指出in your other question时,你必须百分之百地逃避这些值。)
然后,您可能会发现自己在用户与Web服务器交互的每个阶段重复这四个步骤。根据服务器的复杂程度,这可能是一个缓慢而费力的过程。