۱۳۸۸/۰۴/۲۷

دريافت اطلاعات از سايت‌هاي غير استاندارد


اساسا از آنجائيكه ما در يك دنياي كامل زندگي نمي‌كنم و بقولي همه چيزمان بايد با همه چيزمان جور دربيايد، ممكن است هنگام استفاده از يك httpWebRequest به خطاي زير برخورد كرده و عمليات دريافت اطلاعات متوقف شود:

The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF

و يا حالتي ديگر:

The underlying connection was closed: The server committed an HTTP protocol violation.

بعضي از وب سروها ممكن است پاسخ ارسالي خود را دقيقا مطابق سطر به سطر RFC هاي مربوطه ارائه ندهند و كلاس httpWebRequest دات نت هم تعارفي با آن‌ها نداشته و به دلايل امنيتي پردازش پاسخ دريافتي را نيمه كاره رها مي‌كند.
براي مثال content-length دقيقا بايد به همين شكل ارسال شود و اگر به صورت content length (با يك فاصله در ميان كلمات ارسال گردد) به عنوان يك HTTP response split attack در نظر گرفته شده و خطاهاي HTTP protocol violation حاصل مي‌شوند.

اما مي‌توان آگاهانه دات نت فريم ورك را وادار كرد كه از اين مساله چشم پوشي كند و اين نوع سايت‌ها را نيز بررسي و دريافت نمايد. براي اين منظور در فايل app.config برنامه ويندوزي خود و يا web.config يك برنامه تحت وب، چند سطر زير را اضافه كنيد:

<configuration>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
</configuration>