草庐IT

php - 缓慢的 HTTP/1.1 响应,file_get_contents 远程服务器

coder 2024-04-20 原文

我正在通过 HTTP 1.0 协议(protocol)从远程网站获取文件。我想我会很好,在获取文件时使用 gzip 以最大限度地减少使用的带宽。

无论我如何形成标题,我都没有在响应中获得 gzip 内容,尽管在使用浏览器进行测试时确实如此。我还使用我的代码从我自己的网站获得 gzip 格式的服务。

我认为这是因为他们的服务器使用的是仅在 HTTP 1.1 中可用的分块传输编码。

我将协议(protocol)切换为 HTTP 1.1。这是我下面的代码。我的网站回答了这个问题,尽管 1.0 立即执行的操作需要几秒钟的时间。当我在远程网站上尝试时,它一直在加载而没有回答。

所以我的问题是,为什么 1.1 这么慢?我使用的是格式错误的 header 还是什么? 另外,为什么我的页面回答而另一个没有。任何输入?谢谢。

$header = array(
    'http' => array(
    'method'  => 'GET',
    'header'  => 'Accept-Encoding: gzip\r\n' .
    'User-Agent: test\r\n)' .
    'Accept-Charset: ISO-8859-1,utf-8\r\n' .
    'Accept-Encoding: gzip, sdhc, deflate\r\n' . 
    'Host: www.mysite.test.com\r\n' .,
    'protocol_version' => '1.1\r\n'
);

$context = stream_context_create($header);
$file_string = file_get_contents('www.mysite.test.com/test.txt', false, $context);

编辑:在达到服务器保持事件限制之前,它确实看起来像是保持连接打开。花了大约 1.1 分钟从他们的网页上得到我的答案。然后需要弄清楚如何关闭连接。否则它似乎有效。

最佳答案

好吧......经过我的头撞墙一段时间后,答案似乎很明显。

我将 Connection 移到靠近顶部的位置,它突然工作了,但随后 gzip 设置停止工作了。所以我试图弄清楚为什么顺序似乎很重要。似乎我用单引号引用 ' 而不是 "导致\r\n 无法正确评估。至少我认为这是问题所在。它现在似乎正在工作. 无论如何谢谢大家...我讨厌犯这样简单的错误...

再次编辑:我似乎仍然没有从该站点获取 gzip,尽管它在我的站点上有效。我将尝试从浏览器复制 header ,看看会发生什么。

编辑 2:我们开始了!它按预期工作。也许他们以某种方式过滤了用户代理或其他什么。

编辑 3:现在我在多次下载同一个文件时得到真正随机的结果。 有时我会把它压缩,有时不会。他们的服务器随机为我提供两个 header 之一。唯一的区别是 Vary: Accept-Encoding 和 Content-Encoding: gzip。我以为一旦我告诉它我可以处理它,它就会总是发送 gzip?我自己的服务器似乎一直在提供 gzip。

编辑 4:由于某种原因,当我在用户代理中使用较早的 MSIE 5.0 版本时,有时会收到 gzip:ed 服务,有时会收到未压缩的服务。我只能理解将 gzip 移交给能够处理它的用户代理,但至少它应该是一致的。反正。问题已解决,谢谢。

关于php - 缓慢的 HTTP/1.1 响应,file_get_contents 远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15322818/

有关php - 缓慢的 HTTP/1.1 响应,file_get_contents 远程服务器的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  4. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  5. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  6. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  7. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  8. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  9. ruby CSV : How can I read a tab-delimited file? - 2

    CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|

  10. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

随机推荐