1

有一个 asp.net 驱动的站点,我可以在成功登录后登录并填写表格下订单。这需要由我的服务器使用 curl 完成。

每当我使用浏览器执行此操作时,都没有什么特别之处。

我去 example.com/login.aspx。填写字段并将其发回。我为已登录的用户返回了一个索引页面。在此之后,我需要单击指向下订单表格的链接。这样做会给我一个表格,我填写并发回。这会产生下订单的想要结果。分析来源显示页面是通过javascript提交的,但如果请求相同,服务器无法知道请求是如何发送的。在此过程中,我跟踪了从浏览器发送的所有发布请求。

有了所有的帖子请求,我编写了一些代码来对 curl 做同样的事情。算法是:

  1. 发送get请求获取example.com/login.aspx页面
  2. 解析任何隐藏字段的响应(因为它们用于模拟全状态连接)
  3. 将状态和登录数据发布到 example.com/login.aspx
  4. 解析状态发回并更新它
  5. 获取下单表格
  6. 再次解析并更新状态
  7. 发布我的浏览器发送的状态和相同的发布数据
  8. 将信息打印到文件而不是 STDERR

在此过程中,cookie 与 curl 一起使用。

一切都很顺利,直到最后一个 POST。我将原始表单返回给我,而不是“成功”或“失败”结果,没有提及验证错误。如果我故意填写乱码或使用浏览器将某些内容留空,则会显示验证错误。

我没有使用 asp.net 的经验,完全被困在这里,如果这个问题太具体,请原谅我。

问题:

如果标题和帖子数据与我的浏览器完全相同,我的 curl 操作怎么会有不同的结果?

为了完整性:

从浏览器发布:

POST /DataEntry.aspx HTTP/1.1

主办方:www.iftin.co

用户代理:Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0

接受:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

接受语言:nl,en-us;q=0.7,en;q=0.3

接受编码:gzip,放气

连接:保持活动

推荐人: https ://www.iftin.co/DataEntry.aspx

Cookie:ASP.NET_SessionId=SomethingX;.hawAuth=SomethingY

内容类型:application/x-www-form-urlencoded

内容长度:10111

通过 Curl 发送帖子:

POST /DataEntry.aspx HTTP/1.1

用户代理:Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0

主办方:www.iftin.co

推荐人:https ://www.iftin.co/DataEntry.aspx

Cookie:.hawAuth=SomethingZ; ASP.NET_SessionId=SomethingW

接受:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

接受语言:nl,en-us;q=0.7,en;q=0.3

接受编码:gzip,放气

连接:保持活动

内容长度:25236

期望:100-继续

内容类型:application/x-www-form-urlencoded;boundary=----------------------------5bb8ec4e5ecc

如果人们想看一些代码,请告诉我。感谢您阅读并花时间在这上面。

写完这篇文章后,我注意到我的 curl 请求的 Content-Length 比我的浏览器请求大得多。我将浏览器 Post 正文中的所有参数复制到我的代码中,并将其传递给 curl 数组。

所以 curl 默认要在请求中添加一些数据。是这样吗?

CURLOPT_SSL_VERIFYPEER 设置为 false,而页面使用 SSL。会是这样吗?为什么?

4

0 回答 0