Я застрял здесь около 24 часов по проблеме, с которой я не могу опустить голову.
Страховая компания, в которой я работаю, полагается на запрос данных котировок с нескольких веб-сайтов, некоторые для анализа, некоторые для котировок для клиентов. Я создаю класс для программного обеспечения, которое я разработал, чтобы добавить нового поставщика страхования к нашим нынешним провайдерам.
Я в основном отправляю запрос POST с информацией о клиентах и наш реферал. Но для жизни я не могу заставить это работать. Я делал это сотни раз без проблем.
Я контролировал заголовки в Fiddler и полностью копировал их. Единственное, что, по-видимому, делает сайт, - это 4 значения cookie. Один из них - xsrf (который автоматически устанавливается при посещении страницы представления, я могу получить это из исходного кода или путем доступа к CookieContainer), другие 2, похоже, связаны с сеансом, но зашифрованы. Итак, что я делаю, это заставить мое программное обеспечение посещать страницу, файлы cookie сохраняются, а затем отправлять запрос на отправку.
Я пробовал отправить форму вручную с отключенным JavaScript. И это работает. Поэтому я могу предположить, что с JavaScript не установлены никакие переменные или файлы cookie.
Я не могу понять, почему форма не отправляется.
Единственное, о чем я могу думать, это данные сеанса в файлах cookie зашифрованы и хранятся некоторые значения, предоставляемые браузером. Но без JavaScript какие значения могут предоставить браузер, чтобы мое программное обеспечение не было?
Я установил весь обычный User-Agent и т.д. Как я уже сказал, я делал это сотни раз и никогда не сталкивался с такой проблемой.
Я также использовал Fiddler для получения информации о файлах cookie и поместил их непосредственно в программное обеспечение (используя тот же браузер, что и агент пользователя, установленный на программном обеспечении), что теоретически должно работать, но это не так.
Я сравнил мой запрос POST с запросом POST из браузера, бок о бок, и они оба идентичны. Единственное, что отличается, - это значения cookie сеанса, которые зашифрованы.
С веб-сервера не возвращается ошибка. Код ответа - 200. Единственная разница заключается в том, когда цитата успешно отправлена, страница будет включать текст "Котировка успешная". Который я не могу достичь с помощью программного обеспечения.
Я позвонил страховому провайдеру, который не может помочь, так как они не управляют своим сайтом. У них нет API, но они позволяют нашей компании делать запросы через программное обеспечение, пока мы предоставляем идентификатор реферала.
Любые идеи о том, что здесь может происходить?
Для записи я использую С# и HTTPClient. Я не уверен, что это важно.
Edit:
Одна вещь, которую я заметил, это то, что после запроса GET на страницу, содержащую форму цитаты - с помощью браузера - я замечаю, что с сервера возвращается следующий заголовок:
P3P: CP="CAO PSA OUR"
Кроме того, когда запрос POST успешно отправлен в браузере, он также возвращает этот заголовок.
Но когда я выдаю запрос GET с помощью программного обеспечения, я замечаю, что сервер отвечает заголовком P3P, но на запрос POST нет. Может ли это быть релевантным/значительным?