2016-06-15 10 views
3

Web.Page(Web.Contents( 'url'))関数を使用してWebページからテーブルを読み取ると、矛盾した改行のためにサイトでエラーが発生します。Power BI(Power Query)Web要求の結果、「CRにLFが続く必要があります。」エラー

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

これらのエラーを無視するためにWeb機能に渡すことのできるオプションはありません。

この方法は、しばらくの間動作しますが、セーブ/リフレッシュに耐えられないん

let 
    BufferedBinary = Binary.Buffer(Web.Contents("http://vote.sos.ca.gov/returns/president/party/democratic/county/all")), 
    CleanedUp = Text.Replace(Text.Replace(Text.FromBinary(BufferedBinary), "#(cr,lf)", "#(lf)"), "#(lf)", "#(cr,lf)"), 
    Table = Web.Page(CleanedUp) 
in 
    Table 

答えて

1

これは、他のコードサンプルの作品のように見えるかもしれませんが、それはおそらく、それだけで実行されていないことを意味まだ。


2つのライブラリ関数Web.Contents('url')Web.Page(Web.Contents('url'))は異なるHTTPクライアントを使用します。

はかなり基本的なHTTPクライアントを使用しますが、変換されないWeb.Contentsの代わりにWeb.PageがURLを直接ロードするためにIEブラウザを使用します。 IEはどんなHTTPプロトコルのエラーに対しても非常に寛容ですが、基本的なHTTPクライアントははるかに厳密で、あなたが見るエラーを引き起こします。 Web.Pageが直接ブラウザを使用し、それが代わりにWeb要求をするためにWeb.Contentsを使用して、ブラウザにそれらのバイトをロード最適化をスキップする中Binary.BufferまたはText.Replace呼び出すことによって

「の間を、」。

あなたは

Web.Page(Web.Contents("http://vote.sos.ca.gov/returns/president/party/democratic/county/all")) 

を起動するのであれば、この場合、あなたはそれだけでWeb.Contents('url')はエラーになりますので、壊れてしまいます「ウェブから」良い結果テーブルを取得し、しかします。


URLを共有するので、私はhttp://vote.sos.ca.gov/returns/president/party/democratic/county/allを試してみて、同じ問題を取得することができました。

根本的な問題は、HTTPレスポンスヘッダ内の第四クッキーが途中で無効進文字0x01の権利を有するされています

Bad Hex

多分これはhttp://vote.sos.ca.gov/が自分のサーバー上で修正することができるものでしょうか?私は彼らのお問い合わせページの「バグ報告」を提出しようとしたが、私はそれが右チャンネルであるかわからない...


ところで、私たちのHTTPクライアントライブラリは非常に良いエラーメッセージを与えるものではありません、があります間違ったCRやLF文字はありません。存在していても、問題がHTTPヘッダーにあるため、本文のText.Replaceはこの場合修正できません。

+2

ありがとうございました。これを掘り下げていただきありがとうございます。本当にありがとうございます。はい、このサイトや他のサイトで使用されているCDNやAPI製品 "Incapsula"と大きく関連しているようです。 –

関連する問題