如何让PowerShell请求含媒体的推特链接返回正常可读结果?
解决Twitter含媒体推文PowerShell请求乱码问题
问题场景
按以下操作流程请求含视频/图片的Twitter推文时,返回结果出现乱码;但请求无媒体的推文时,结果正常可读:
- 登录Twitter账号
- 打开Chrome开发者工具,筛选
TweetDetail请求 - 访问含媒体的推文链接
- 右键该请求,选择复制 > 复制为PowerShell
- 在生成的命令末尾
-ContentType "application/json"后追加| select Content | FL - 执行PowerShell命令
异常输出(含媒体推文)
�:Y��(�����?[R:W�8^��9S♣C3▼@�QYd1►��8 jE��і:�B*�☻t�jRY��Ц8+F�z*�� �B��2_�\� A���2 g�s�ģ�# �}�^� }�'@�SL]l^1ꕟ��X↨��3▲k���V��,ܤC��2����L→$��↓�☻7����r���4�1aT{��D§K�Ćh�bS(‼u"!RU▲� ∟��Ɂҁ/�B�☺♠B�J"�ȢW��) �~C�J��eҀ<<�]�▼�@���hgvM|��ږQ��ٶ��������Z♺�t§V���=��� �☺�Klkr�♦���p�azK"3I¶�)��,n�չ]�!�#���y�:��▬�W �'ы1���Yr��"�������ͣ��|∟ma�Y*b�^��MomHݶm(�kG��s�♦���,|<��9д♦�����5�[☺qO�Χ�☺,��)�ȍ���ڃ����O���U�tQ��{��f� ���^�p�ā��!g?.‼�E���j�}�.X�S� ٙ�9BS�[�fy▬��a�-�D��D��=��W↑�t��↕�QP�Vt�&*�̣j�:�:�►���>4�◄�♦��<��;�4C|�������Z��▼m↔� 9��ߺҁ|�,[����▬�. ����h�^\�ʠQ�w�☻�ڊҺ���s��e��R^�m��b���&����3s�?.G�y��Y_♦����h�7>�m1�.�O��|�v���j��`7♥�w`��� W�m}8���3Ze_� �E↔♦%}y↕b6)t�;��߳�m�‼h+�▼���?f� ..........
正常输出(无媒体推文)
Content : {"data":{"threaded_conversation_with_injections_v2":{"instructions":[{"type":"TimelineAddEntries","entries":[ {"entryId":"tweet-1711788684243046525","sortIndex":"7511583352611729282","content":{"entryType":"TimelineTime lineItem","__typename":"TimelineTimelineItem","itemContent":{"itemType":"TimelineTweet","__typename":"Timelin eTweet","tweet_results":{"result":{"__typename":"Tweet","rest_id":"1711788684243046525","has_birdwatch_notes" :false, ..........
注意:在Linux终端使用Copy as cURL (bash)复制请求时,两种推文的返回结果均正常可读。
问题原因
Twitter对含媒体的推文响应启用了gzip压缩,但Chrome复制的PowerShell命令未包含自动解压逻辑;而无媒体推文的响应未启用压缩,或PowerShell默认处理了非压缩内容,因此结果正常。
解决方案
方法1:添加gzip解压逻辑
将原命令末尾的| select Content | FL替换为以下代码,手动对响应内容进行gzip解压:
| ForEach-Object { $stream = New-Object System.IO.MemoryStream(,$_.Content) $gzipStream = New-Object System.IO.Compression.GzipStream($stream, [IO.Compression.CompressionMode]::Decompress) $reader = New-Object System.IO.StreamReader($gzipStream) $reader.ReadToEnd() }
方法2:禁用响应压缩
在复制的PowerShell命令的-Headers参数中,添加"Accept-Encoding" = "identity",告知Twitter不要返回压缩后的内容:
-Headers @{ # 保留原有请求头信息 "Accept-Encoding" = "identity" }
使用任意一种方法修改后,执行PowerShell命令即可得到正常可读的JSON内容。
内容的提问来源于stack exchange,提问作者July Elizabeth
相关产品推荐
相关产品推荐

