5

次のようにリクエストがあるデータを「スクリーンスクレイピング」しようとしています(フィドラーから)

POST http://fallenlondon.storynexus.com/Auth/EmailLogin HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Referer: http://fallenlondon.storynexus.com/signup
User-Agent: Mine
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Cache-Control: max-age=0
l: 
Origin: http://fallenlondon.storynexus.com/
DNT: 1
Accept-Encoding: utf-8
Accept-Language: en-GB,en;q=0.8
Cookie: ASP.NET_SessionId=05xq3gndu4nczvy5wsah5qyw; __utma=100212060.1740063036.1431282067.1431282067.1431284767.2; __utmb=100212060.14.10.1431284767; __utmc=100212060; __utmz=100212060.1431282067.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Host: fallenlondon.storynexus.com
Content-Length: 54

(コンテンツは私の資格情報です) - このヘッダーは、ブラウザーで Web ページを手動で表示して追跡した要求と一致します。

これを HttpWebRequest.GetResponse() を使用して送信すると、応答が返されます

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache, no-store, must-revalidate
Content-Type: text/html; charset=utf-8
Date: Mon, 11 May 2015 20:54:15 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 4.0
X-Powered-By: ASP.NET
X-Server: Web1
Content-Length: 16900
Connection: keep-alive

これは(再び)ブラウザを使用して取得したものと一致します。フィドラーを使用すると、17k のデータ (html) が表示されます。

var stream = response.GetResponseStream();
if (stream == null) return null;
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
   var data = reader.ReadToEnd();
   reader.Close();
   return data;
}

「新しい StreamReader」行で、「ストリームは読み取り不能です」という例外が発生します。デバッガーは、ストリームが読み取り可能でも書き込み可能でもないことを示しています。これは私が読んだ 2 番目のページです (最初のページは、ログイン ページを取得するためのメイン URL への単純な要求です)。これは、同じコードを使用して正常に機能します。使用後、すべてのストリームとリクエストはクローズされました。

Google は、ページ エラー (いいえ、ステータスは 200) を示唆している、または既にデータを読み取っています (いいえ、コードはここにまっすぐ進みます) スレッドをまったく使用していないので、それは問題ではありません。エンコーディングを変更してみました (gzip を要求すると、期待どおりに小さいペイロードが得られますが、まだ読み取ることができません) win7 x64 で c#.net 4.5.2 を使用しています

誰かが私が間違っていることを知っていますか?

4

1 に答える 1

4

ああ!コードの「見落とし」が原因で、ストリームを 2 回読み取ろうとしていました。すべて現在稼働中

于 2015-05-13T22:30:52.103 に答える