__doPostBack()
确实是 ASP.NET 的东西。以下是该函数的作用:
var theForm = document.forms['FORMNAME'];
if (!theForm) {
theForm = document.FORMNAME;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
基本上,它将两个隐藏字段 (__EVENTTARGET
和__EVENTARGUMENT
) 的值设置为参数的相应值。然后它提交表单。
如果您愿意,您可以继续使用 PHP HTML 解析器来完成这项工作,但是当您遇到其中一个__doPostBack()
链接时,您必须手动制作一个 POST 请求。在高层次上,你会看到这样的东西:
- 获取当前表单值。您可能必须遍历每个
input
元素等并将值添加到数组中。如果页面上没有文本框、复选框等,则默认情况下,您应该只保留 .NET 嵌入的隐藏字段(例如__VIEWSTATE
、__EVENTVALIDATION
等)。
- 解析传递给 和 的值并
doPostBack()
覆盖现有值。__EVENTTARGET
__EVENTARGUMENT
- 制作您的 POST 请求。我不确定您正在查看的库是什么(如果有的话)以这种方式提供,但是从 PHP 执行此操作的一种流行方法是通过 cURL 扩展。例如,请参阅http://davidwalsh.name/execute-http-post-php-curl。
- 获取 HTML 结果并像往常一样使用库进行解析。
或者,如果您总是对同一页面发出几乎相同的请求,您可能会跳过解析表单的一些步骤,直接跳到制作 POST 请求。
这不会很有趣,但它适用于这种情况。如果您需要处理涉及 JS 的更复杂的案例,或者您只是想以不同的方式处理这个问题,那么(正如您所提到的)库基本上可以驱动浏览器并为您处理这些事情。首先想到的两个是:
还有其他选项,但我不知道有什么可以快速轻松地集成到现有的 PHP 脚本中。