Java 如何从英国政府冠状病毒api下载csv

Java 如何从英国政府冠状病毒api下载csv,java,httprequest,java-io,Java,Httprequest,Java Io,我一直在尝试从英国政府的冠状病毒API下载csv。您可以使用URL手动下载该文件: 我尝试了多种下载文件的方法,例如JavaIO: InputStream in = null; try { in = new URL("https://api.coronavirus.data.gov.uk/v1/data?filters=areaType=overview&structure=%7B%22areaName%22:%22areaName%22,%22

我一直在尝试从英国政府的冠状病毒API下载csv。您可以使用URL手动下载该文件:

我尝试了多种下载文件的方法,例如JavaIO:

    InputStream in = null;
    try {
        in = new URL("https://api.coronavirus.data.gov.uk/v1/data?filters=areaType=overview&structure=%7B%22areaName%22:%22areaName%22,%22date%22:%22date%22,%22newCasesBySpecimenDate%22:%22newCasesBySpecimenDate%22,%22cumCasesBySpecimenDate%22:%22cumCasesBySpecimenDate%22%7D&format=csv").openStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        Files.copy(in, Paths.get("test.csv"), StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }
和Java NIO:

    ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
    FileOutputStream fileOutputStream = null;
    try {
        fileOutputStream = new FileOutputStream("test.txt");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    FileChannel fileChannel = fileOutputStream.getChannel();

    try {
        fileOutputStream.getChannel()
                .transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
    } catch (IOException e) {
        e.printStackTrace();
    }
但是,它仅在文件中显示:

    ‹ 0w®_ÿ}ZKŽX5Üs
àHm÷ÏÞ;$6ˆŒÈe‘€HâöTy²L=)Š”y»ÝŸru{^þ~}ùååãëxÿòåu|zý÷ǗϯŸøï׿^ÿðñõÓOüñïÿ|üÆ¿ûíÓ‡/¯ï¿ÿùç?Þÿùq,[önNü3,Ç\Çæ      ³1ÛN·wï£pvÆjÛ\Ï:Kâö˜§66_ez=ì¸}½Vœµ%®Æò•°rY•™Ä%p½`–õÔ¸ ®xŽ™§VKœ•8ÏÒ¶†Ï¨nZ˜ö<’1¦ÁË^ßÆÙ;®bÃ;V>•Ÿ³±V]\T[*ÜBÜÜž¶Âæ–¸M¿,œ×Ìjk\8ë8݈„!lE÷\'µuI¯¸³*¦KÜV+±¼²M³Ýc#`Ka1¥¼ÆnØ6%l""|ì8=õˆô™c¯X-ã5óiïÑgŸl  CA2x4¼RGÂ÷èêÑyæ–Q˜HK„ °ˆ˜z5Dar¤WõÔG–ö‰X[ÃP[{ƒQE©i"Õ¦UXTF4†Êߣ   ¬OJ‚H¬Y¾gËMÁbÈ7d²©tö’ÄÎ;!mûÊas u¤{Q°ìÁL°
Q@Éì‘YXTÂœ«9JP–Œ]†Ë¹qú¤ˆ‚WŸ‘`—1%{ùìBç·7µCRBÓ`Žo'‘æ@­šËÕ@I¼0À®-ˆ($Úe‘µED‰ªQ@ÊoJT¢à3Týt½* PZáHomjØòÑz°9¨æXÈò–(¤X¢¢EL¢9ÁµìÌ#½
"Š]ð½ùnix(Nùðõ…Íʉ‚Òž¸®B;hYQ9 TZʃ»5ãáŒ÷" ª·½#îjÜß ÑÔgœØ•î
µ¢w4X³ö*èçÞÅ^å-íû ëk6Ûµî¶!­§|ŠèëZm=ÅËÖÓCç=M2çZöPC ‡†½3$
¾?Œ#Œ{@á
¦ös”H‰¼ßW2¥1L¸Í5
Ü4™Ñ¾MÈR HMk1LµÅmCÔ¦!*k¶DázÈ»£q…Û~
NJ…<ãß
‘ATÐzäÄ:ûa-§Vh—¹-€
 îÖÞ‚ç'³~ÕI½<ôÃÊNéÓIÏb
7¹õ»è7Ó;ÎÛÎ Ÿ¬“^ʃZ£¼Î-Õ=¡Ù–‘¦2šè Øýèýx%³Ê -VHÔ¢à!
ÂMzž²È!) <wëµèù¾Jê<+ñ:Õg!ý R‚Nˆá‘ 'Xÿ³]‡r膙¬E5ÄëÓÑ›š6ýÔ$j£i’(g—7X׃ñkP/¹UêHƒfò®TR¸4      b Å“M>:,U‹=K®Rrž—§Dmô(p¨!çS‚Ð1aðO!ñ    BIð6jG ‚\Üñi ¢HâJf­
‡F:‡7*Aë+Â@o7G#§»Ò-A66/}ôKžŽú(¸RÍ)#|å:á“¥ø¥ÉBÙ4µ§W*ÈÄ (R$ÔMÑz»@…AsJ€ƒØn¯³TƒLÒ²x:t5ÚO‘ ùÃJ¤qqPŸ2vàŸžÜÎÜdf‚š34[Úþ)j†½¥0oòOS²eu‚~íÂÚ;K‚‚ú˜ ü@‚œ}@UKoÇV“Û•…t&NVµ(r$è·AEZ©É•Ð)­4>;Ð÷KrŠ¢7Ô­]·û‚@HŠªzk¾¾{A¬J{/úi–¢ßº¬ÒŒÒ†CßlºÀ¦’]uõ
ô'šc7éÌEãt½ãátðø†MJ%A`•ƒž}‘žävWÜ0.»GºœâÆ&MO‰âD’µÐhͤ«8ù1æ'aÚ®€¤æÑn˜ô:mÇå®Aœ/2_X1S¢&OˆµêÌÔ(
úƒŒ©=]ÚΉ4P…&U¢èù»V¶bŽ"½4çx¥jÙ$ôr)=몛É9dù,iª¶?«–…Œ!Õ“‰zJ£àù8Ø×̃·øhàì[ͽ,oÃe›sOÔ~Iãs‡¨PLE…“œg¸˜b…ø w jÉv$oõ9G¸\¢PÅë-ô˜$oÃU´ýéƒõqÇg@åy°ÞyF¢"}K‚cÌÔ ü’(:´‘_`¤ÔÖßjåSÇví¯+œyË¡-i=1É]èòT{—•¶ó±Æ|VZFMšW,Ÿd%zócšôÇ&|Áü­íò·ñÍZ¦fýD-N°ÖìR•–w””X3Vh]ã&:  ‰â{ÿÞèé%jßVÿF‡&ãx§SÌBCO¥QèÞØÒO¨íX…¾¥6gó™Sæ=•óí èÒ_v9gé;´ïù‚†•Ñ2sŒÓâ‹B¼EN9'NÝWT×zs ¡@b½Ò[¢6wäs\ËÛ8È9A9‰Xºª¡ ç8ñ™]J9Ç;85
YAÎAïaœy…ºÑ‚œ“¸<AçðªF¡ç
ˆ—Hm}_œ8ÄvíUø~ƒ¿&@¨ârΦ]¨ðEßóê^ W¹#ÇÏ'ö½¤^=-Ä>hÛd'ß6’ívÅ”ùÎáÓ å‰ë8pßð¥Ð"ícÇ8ýú„dðå>’ƃ„s‚óMFÚ8öO¹:µ@79‘Ñ]¥ã¶¹Ï¢=S»Óê><*Ó§#×@Ž õé-ê  ܇h¢æѧƒÇûmŸÚO äzá/Ü4ßV‚HREï@¨!“Cmç—‹p    óbQÛù}žgÑ,ùJ[5^ü%ËÏID(a
9ßñËCF•n{éíòês’èÃvÍç{s½’ó*ä0¶R:“¿s€ìæ kIg¾Mš7
Aüj1÷õÙÛ)À)3ú!´uj²á$ŸsÞ®    apPz'4½ÕÒ‡“ï‘wâ(ÏÄ÷.ª„šÒdŠñ¥(ÐÉ5±o@5„/‚÷·…ô‰Ø‰€Aøm¶ç^òÈdÞ˜z‰ÅçPéöWdE½˜œ}¯<…­„. Žlx£Ë!“ð7jdºÞ‡«¡Ûº
^ŸùkQCåÖº³\¤üŽÃþò34Ô·ne5ú\·™ª?Y¬fzF~žüßú³áK¯¡xŸ¾îǯýøµ¿æã×xüê_×ãW:K¥¯dYŠ_¡¯†L?£¯dX=~Ej=|¥¯dbš?~]_§þ:ya?}Å7|ý:7é…)  
它只会回来

 0w�_�}ZK�X5�s�Hm���;$6��e��H��Ty�L=)��y�ݟru{^�~}�����x���u|z��Ǘϯ���׿^�����O����|�Ə���Ӈ/����ç?���q,[�nN�3,�\��       �1�N�w�pv�j�\�:K����66_ez=�}�V��%���rY���%p�`��Ը �x���VK���8����ϨnZ��<�1���^���;�b�;V>�����V]\T[*�B�܁���斸M�,���jk\�8�8��!lE��\'�uI����*�K�V+���M���c#`Ka1���n�6%l""|�8=����c�X-�5�i��g�l CA2x4�RG�����y�Q�HK�  ���z5Dar�W�����X[�P[{�Q�E�i"��UXTF�4��ߣ  �OJ�H�Y�g�M�b�7d��t����;!m��asu�{�Q���L�Q@��YXT���9JP��]����q����W��`�1%{��B�7�CRB�`�o'���@����@I�0��-��($ځe��ED��Q�@�oJT��3T�t�*�PZ�Homj���z�9��X��(�X��EL�9����#�"�]��nix(N������ʉ�Ґ���B;hY�Q9   TZ���5���" ���#�j�� ��g������w4X����*����^�-�� �k6۵�!��|���Zm=����C�=M2�Z�PC ���3$�?�#�{@���s�H���W2�1L��5�4�ѾM�R�HMk1L��mCԦ!*k�D�zȻ�q��~NJ�<��AT�z��:�a-�Vh��-����ނ�'�~�I�<���N��I�b7����7�;��� ���^ʃZ����-�=�ٖ��2�� ����x%�ʠ-VHԢ�!�Mz���!) <w����J�<+�:Õg!� R�N�ᑠ'X��]�r����E5���ћ�6���$j�i�(g�7X׃�kP/�U�H�f�TR�4       b�œM>:,U�=K��Rr����Dm�(p�!�S��1a�O!� BI�6jG �\��i �H�Jf��F:�7*A��@o7G#���-A66/}�K���(�R�)#|�:ᓥ���B�4��W*�� (R$�MÑz�@�AsJ���n��T�LҲx:t5�O���� ��J��qqP�2v������df��34[��)j���0o�OS�eu�~��ڍ;K���� �@��}@UKo�V�ە�t&NV�(r$�AEZ�ɕ�)�4>;��Kr��7ԭ]���@H��zk���{A�J{/�i��ߺ�Ҍ��҆C�l����]u��'�c7��E��t���t���MJ%A`���}���vW�0.�G����&M��D���hͤ�8�1�'aڮ����n��:m��A�/2_X1S�&O�����(����=]�Ή4P�&U����V�b�"�4�x�j�$�r)=몛�9d�,i��?����!Ս��zJ���8��̃��h��[ͽ,o�e�sO�~I�s��PLE���g��b���w j�v$oõ9G�\�P��-��$o�U����q�g@�y��yF�"}K�c�Ԡ��(:��_`����j�S�v�+�yˡ�-i=1�]��T{������|VZFM�W,�d%z�c����&|�������Z�f�D-N���R��w��X3Vh]�&:   ��{����%j�V�F�&�x�S�BCO�Q����O��X���6g�S�=���� ��_v9g�;�������2s���B�EN9'N�W�T�z�s �@b��[�6w�s\��8�9A9�X��� �8�]J9�;85YA�A�a�y��т���<A��F����Hm}_�8�v�U�~��&@���rΦ]��E���^�W�#��'����^=-�>h�d'�6��vŔ���� ��8p����"�c�8���d��>�ƃ�s���MF�8��:�@79��]����Ϣ=S���><�*ӧ#�@����-�� ܇h��ѧ���m��O �z�/�4�V�HRE�@�!�Cm痋p    �bQ��}�g�,�J[5^�%��ID(a9���CF�n{����s���v��{s���*�0�R:��s���kIg�M�7A�j1����)�)3�!�uj��$�s   a�pPz'4��҇��w�(���.����d��(��5�o@5�/�����؉�A�m��^��dޘz���P��WdE���}�<���. �lx��!��7jd�އ��ۺ^���kQC�ֺ�\�������34��ne5�\���?Y�fzF~������K��x���ǯ�������x��_��W:K��dY�_���L?��dX=~Ej=|��db�?~]�_��:ya?}�7|�:7��)

0w�_�}ZK�X5�s�陛下���;$6.��E��H��泰�L=)��Y�ݟru{^�~}�����x���u|z��Ǘϯ���׿^�����O����|�Ə���Ӈ/����ç?���q,[�nN�3.�\��       �1.�N�W�光伏�J�\�:K����66_ez=�}�v��%���雷���%P�`��Ը �x���VK���8����ϨnZ�������五] \T[*�B�܁���斸M�,���jk\�8.�8.��!乐��\'�用户界面����*�K�五+���M���c#Ka1���N�6%l“|�8=����C�X-�5�我��G�l CA2x4�RG�����Y�Q�香港�  ���z5Dar�W�����X[�P[{�Q�E�我"��UXTF�4.��ߣ  �OJ�H�Y�G�M�B�7d��T����;!M��华硕�{�Q���L�Q@��YXT���9JP��]����Q����W��`�1%{��B�7.�CRB�`�o'���@����@我�0��-��($1665e)��预计起飞时间��Q�@�在职培训��3T�T�*�PZ�霍姆杰���Z�9��X��(�X��埃尔�9����#�"�]��尼克斯(北)������ʉ�Ґ���B、 hY� Q9 TZ���5.���" ���#�J�� ��G������w4X����*����^�-�� �k6۵�!��|���Zm=����C�=平方米�Z�个人计算机���3$�?�#�{@���s�H���W2�1L��5.�4.�ѾM�R�HMk1L��mCԦ!*k�D�zȻ�q��~新泽西州�:,U�=K��Rr����Dm�(p�!�s��1a�啊!� 毕� 6jG�\��我�H�Jf��F:�7*A��@o7G#���-A66/}�K���(�R�)#|�:ᓥ���B�4.��W*�� (R)$�马涅兹�@�AsJ���N��T�长x:t5�O���� ��J��qqP�2v������df��34[��)J���0o�操作系统�欧盟�~��ڍ;K���� �@��}@UKo�v�ە�t&NV�(r)$�AEZ�ɕ�)�4>;��K r��7ԭ]���@H��zk���{A�J{/�我��ߺ�Ҍ��҆C�L����]U��'�c7��E��T���T���M J%A`���}���大众汽车�0.�G����&M��D���hͤ�8.�1.�'aڮ����N��:M��A.�/2_X1S�&O�����(����=]�Ή4P�&U����v�B�"�4.�x�J�$�(r)=몛�9d�,我��?����!Ս��zJ���8.��̃��H��[ͽ,o�E�所以�~我�s��PLE���G��b���w j�v$oõ9G�\�P��-��$o�U����Q�g@�Y��yF�"}K�C�Ԡ��(:��_`����J�s�v�+�yˡ�-i= 1�]��T{������| VZFM�W�d%z�C����&|�������Z�F�D-N���R��W��X3Vh]�&:   ��{����%J�v�F�&�x�s�BCO�Q����O��X���6g�s�=���� ��_v9g�;�������2s���B�恩9'N�W�T�Z�s�@B��[�6w�\��8.�9A9�X��� �8.�]J9�;85YA�A.�A.�Y��т��� 违反HTTP协议,服务器返回带有
内容编码:gzip
的csv数据,即使您显式发送
接受编码:identity
头。您需要解压缩响应正文

此约束实际上在该API的开发人员指南中:

所有API响应都使用GZip压缩。因此,请求客户端必须接受GZip编码的内容

如果服务器开始针对我们的(现在是显式的)请求发送未压缩的响应,这种方法应该可以工作,并且可以继续工作:

请注意,无论是此代码还是您自己的代码,都不会正确关闭连接和流。我建议使用此代码来优雅地关闭连接和流,即使在出现异常的情况下也是如此


通过使用第三方HTTP库,例如或,您可以省去一些麻烦。

违反HTTP协议,服务器返回带有
内容编码:gzip
的csv数据,即使您显式发送
接受编码:identity
头。您需要解压缩响应正文

此约束实际上在该API的开发人员指南中:

所有API响应都使用GZip压缩。因此,请求客户端必须接受GZip编码的内容

如果服务器开始针对我们的(现在是显式的)请求发送未压缩的响应,这种方法应该可以工作,并且可以继续工作:

请注意,无论是此代码还是您自己的代码,都不会正确关闭连接和流。我建议使用此代码来优雅地关闭连接和流,即使在出现异常的情况下也是如此


通过使用第三方HTTP库,例如或,您可以省去一些麻烦。

它应该是
HttpsUrlConnection
,而不是
HttpURLConnection
。违反HTTP协议,服务器返回带有
内容编码:gzip
的csv数据,即使您显式发送
接受编码:identity
标题。您需要解压缩响应正文。@Thomas我该怎么做?我不太熟悉解压缩。提前谢谢。它应该是
HttpsUrlConnection
,而不是
HttpURLConnection
。违反HTTP协议,服务器返回内容编码为
的csv数据:gzip
,即使您显式发送一个
接受编码:identity
标题。您需要解压缩响应正文。@Thomas我该怎么做?我对解压缩不太熟悉。提前谢谢。
 0w�_�}ZK�X5�s�Hm���;$6��e��H��Ty�L=)��y�ݟru{^�~}�����x���u|z��Ǘϯ���׿^�����O����|�Ə���Ӈ/����ç?���q,[�nN�3,�\��       �1�N�w�pv�j�\�:K����66_ez=�}�V��%���rY���%p�`��Ը �x���VK���8����ϨnZ��<�1���^���;�b�;V>�����V]\T[*�B�܁���斸M�,���jk\�8�8��!lE��\'�uI����*�K�V+���M���c#`Ka1���n�6%l""|�8=����c�X-�5�i��g�l CA2x4�RG�����y�Q�HK�  ���z5Dar�W�����X[�P[{�Q�E�i"��UXTF�4��ߣ  �OJ�H�Y�g�M�b�7d��t����;!m��asu�{�Q���L�Q@��YXT���9JP��]����q����W��`�1%{��B�7�CRB�`�o'���@����@I�0��-��($ځe��ED��Q�@�oJT��3T�t�*�PZ�Homj���z�9��X��(�X��EL�9����#�"�]��nix(N������ʉ�Ґ���B;hY�Q9   TZ���5���" ���#�j�� ��g������w4X����*����^�-�� �k6۵�!��|���Zm=����C�=M2�Z�PC ���3$�?�#�{@���s�H���W2�1L��5�4�ѾM�R�HMk1L��mCԦ!*k�D�zȻ�q��~NJ�<��AT�z��:�a-�Vh��-����ނ�'�~�I�<���N��I�b7����7�;��� ���^ʃZ����-�=�ٖ��2�� ����x%�ʠ-VHԢ�!�Mz���!) <w����J�<+�:Õg!� R�N�ᑠ'X��]�r����E5���ћ�6���$j�i�(g�7X׃�kP/�U�H�f�TR�4       b�œM>:,U�=K��Rr����Dm�(p�!�S��1a�O!� BI�6jG �\��i �H�Jf��F:�7*A��@o7G#���-A66/}�K���(�R�)#|�:ᓥ���B�4��W*�� (R$�MÑz�@�AsJ���n��T�LҲx:t5�O���� ��J��qqP�2v������df��34[��)j���0o�OS�eu�~��ڍ;K���� �@��}@UKo�V�ە�t&NV�(r$�AEZ�ɕ�)�4>;��Kr��7ԭ]���@H��zk���{A�J{/�i��ߺ�Ҍ��҆C�l����]u��'�c7��E��t���t���MJ%A`���}���vW�0.�G����&M��D���hͤ�8�1�'aڮ����n��:m��A�/2_X1S�&O�����(����=]�Ή4P�&U����V�b�"�4�x�j�$�r)=몛�9d�,i��?����!Ս��zJ���8��̃��h��[ͽ,o�e�sO�~I�s��PLE���g��b���w j�v$oõ9G�\�P��-��$o�U����q�g@�y��yF�"}K�c�Ԡ��(:��_`����j�S�v�+�yˡ�-i=1�]��T{������|VZFM�W,�d%z�c����&|�������Z�f�D-N���R��w��X3Vh]�&:   ��{����%j�V�F�&�x�S�BCO�Q����O��X���6g�S�=���� ��_v9g�;�������2s���B�EN9'N�W�T�z�s �@b��[�6w�s\��8�9A9�X��� �8�]J9�;85YA�A�a�y��т���<A��F����Hm}_�8�v�U�~��&@���rΦ]��E���^�W�#��'����^=-�>h�d'�6��vŔ���� ��8p����"�c�8���d��>�ƃ�s���MF�8��:�@79��]����Ϣ=S���><�*ӧ#�@����-�� ܇h��ѧ���m��O �z�/�4�V�HRE�@�!�Cm痋p    �bQ��}�g�,�J[5^�%��ID(a9���CF�n{����s���v��{s���*�0�R:��s���kIg�M�7A�j1����)�)3�!�uj��$�s   a�pPz'4��҇��w�(���.����d��(��5�o@5�/�����؉�A�m��^��dޘz���P��WdE���}�<���. �lx��!��7jd�އ��ۺ^���kQC�ֺ�\�������34��ne5�\���?Y�fzF~������K��x���ǯ�������x��_��W:K��dY�_���L?��dX=~Ej=|��db�?~]�_��:ya?}�7|�:7��)
    URLConnection connection;
    try {
        connection = new URL("...").openConnection();
        connection.setRequestProperty("Accept-Encoding", "gzip");
        connection.connect();
    } catch (IOException e) {
        e.printStackTrace();
    }

    InputStream in = connection.getInputStream();
    String encoding = connection.getContentEncoding();
    if ("identity".equals(encoding)) {
        // Nothing to do.
    } else if ("gzip".equals(encoding)) {
        in = new GZIPInputStream(in);
    } else {
        throw IOException("Unsupported encoding " + encoding);
    }
    
    try {
        Files.copy(in, Paths.get("test.csv"), StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }