【发布时间】:2014-01-16 16:06:00
【问题描述】:
我已经被困在这里大约 24 小时了,我无法解决这个问题。
我工作的保险公司依赖于从多个网站请求报价数据,一些用于分析,一些用于向客户报价。我正在为我开发的软件创建一个类,以便将新的保险提供商添加到我们当前的提供商中。
我基本上发送一个带有客户信息和我们推荐的 POST 请求。但是对于我的生活,我无法让它发挥作用。我已经这样做了数百次,没有任何问题。
我在 Fiddler 中监控了标头,并完全复制了它们。该网站似乎唯一设置的是 4 个 cookie 值。一个是 xsrf(当您访问提交页面时自动设置,我可以从源代码中检索它,或者通过访问 CookieContainer),另外两个似乎与会话相关,但已加密。所以我要做的是让我的软件访问页面,存储 cookie,然后提交发布请求。
我尝试在禁用 JavaScript 的情况下手动提交表单。它有效。所以我可以假设 JavaScript 没有设置变量或 cookie。
我不明白为什么没有提交表单。
我唯一能想到的是 cookie 中的会话数据是加密的,并存储了浏览器提供的一些值。但是如果没有 JavaScript,浏览器可以提供哪些值而我的软件没有?
我已经设置了所有常用的 User-Agent 等。正如我所说,我已经这样做了数百次,从未遇到过这样的问题。
我还使用 Fiddler 获取 cookie 信息,并将其直接放入软件中(使用与软件上设置的用户代理相同的浏览器),理论上应该可以工作,但事实并非如此。
我将我的 POST 请求与来自浏览器的 POST 请求并排比较,它们是相同的。唯一不同的是会话 cookie 值,它们是加密的。
Web 服务器没有返回错误。响应码为 200。唯一的区别是报价成功提交后,页面将包含“报价成功”文本。这是我无法使用该软件实现的。
我已致电无法提供帮助的保险提供商,因为他们不管理自己的网站。他们没有 API,但允许我们公司通过软件提出请求,只要我们提供推荐 ID。
关于这里可能发生什么的任何想法?
作为记录,我正在使用 C# 和 HTTPClient。我不确定这是否相关。
编辑:
我注意到的一件事是,在对包含报价单的页面发出 GET 请求时 - 使用浏览器 - 我注意到服务器返回了以下标头:
P3P: CP="CAO PSA OUR"
此外,当 POST 请求在浏览器中成功发送时,它也会返回此标头。
但是,当我使用软件发出 GET 请求时,我注意到服务器使用 P3P 标头进行响应,但在 POST 请求上却没有。这可能是相关/重要的吗?
【问题讨论】:
-
cookies/token 只能使用一次。
-
@SLaks 我访问了包含提交表单的页面。 cookie/令牌在那里设置,然后我提交数据。我每个请求只使用一次。每次访问带有提交表单的页面时,都会按预期提供新的 cookie/令牌。我不想重复使用 cookie/令牌。
-
在发布 check fiddler 时,是否使用了全部 4 个 cookie?
-
@AydinAdn 在 Fiddler 中所有 4 都显示为已使用。虽然当我在 FireFox 中使用 LiveHTTPHeaders 重播请求时,我可以删除其中的 2 个。会话在第一次请求后仅持续约 20 秒,因此很难测试。真正困扰我的是我的软件请求与浏览器请求相同,我不明白为什么它不起作用。我感觉这与我在上面发布的 P3P 内容有关,或者网站从浏览器获取某些内容并将其存储在加密的 cookie 中。
-
尝试使用wire-shark 看看到底传递了什么。
标签: c# http automation bots