2017-07-26 1 views
1

私のカール要求に問題があります。私はGETリクエストを介してWebサーバーからJSONを取得しています。これはWebブラウザで本当にうまく機能します。しかし、カール(またはルビーコード)から取得すると、JSONの一部の値が空です(ブラウザにはありません)。それは私が受け入れられない多くのデータを失うことになります。誰にもこれが起こる原因のアイデアはありますか? 私は既にユーザーエージェント(下記参照)を変更しようとしましたが、それでも同じ結果が得られます。ウェブブラウザ以外のJSONを返しているCurl

curl "http://..../path/to/json" 

または

curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" "http://..../path/to/json" 

同じ結果になります。

編集:私はSafariからカール要求をコピーしようとしましたが(下記参照)、同じ欠損値があります。しかし、Chromeはカールと同じ結果を表示します。

curl 'https://path/to/json' -XGET -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4' 
+0

質問にサンプルの回答を含めることはできますか? –

+0

'-H'はヘッダを配置します。ユーザーエージェントを変更したい場合は、 '-A'フラグを使用する必要があります。 "curl -A" Mozilla/5.0(Windows; U; Windows NT 5.1; de; rv:1.9.2.3)Gecko/20100401 Firefox/3.6.3 "" http://..../path/to/json " ' –

+1

あなたは受け入れられた答えを見てください。https://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-クロム、他のヘッダーフィールドがユーザーエージェントだけで必要とされるかもしれません。それは本当にあなたが要求しているサーバーに依存します。 – minhhn2910

答えて

0

あなたのブラウザがコンテンツ長のヘッダーを無視し、接続が閉じられるまで読み取りを続ける可能性があります。カールはデフォルトではそうではありません(接続が落とされるまで読むのがずっと遅くなる可能性があるため、おそらくパフォーマンス上の理由からです)、コンテンツ長のバイトが読み込まれると読み込みが停止します。あなたのターゲットWebサーバが盗聴され、間違った長さを送信することがあります。 --ignore-content-lengthスイッチを使用して、ヘッダーを無視してすべてを読み取るようにcurlに伝えることができます。

もう1つの可能性は、あなたがカールを読んでいるウェブページが何とかjavascriptで空白を埋めていることです。

もう1つの可能性は、httpセッションクッキーを最初に持たずに完全なjsonがターゲットサーバーから表示されないことです。

0

この問題は、ブラウザの言語によってレスポンスがカスタマイズされているために発生したようです。ですから、フランス語ではjsonがいっぱいです。英語ではいくつかのフィールドが欠けています...

関連する問題